详解Java 连接MongoDB集群的几种方式
作者:超超boy 发布时间:2022-10-03 17:50:47
先决条件
先运行mongodb肯定是必须的,然后导入以下包:
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.MongoCredential;
import com.mongodb.MongoClientOptions;
MongoClient
MongoClient()实例表示到数据库的连接池; 你将只需要MongoClient类的一个实例,即使有多个线程也是一样。
重要:
通常,您只能为给定的MongoDB部署(例如独立,副本集或分片群集)创建一个MongoClient实例,并在您的应用程序中使用它。 但是,如果您创建了多个实例:
所有资源使用限制(例如,最大连接等)适用于每个MongoClient实例。
要关闭一个实例,调用MongoClient.close() 来清理资源。
连接到一个独立的MongoDB实例
以下几种方法:
1.
MongoClient mongoClient = new MongoClient( "host1" , 27017 );
2. You can specify theMongoClientURI connection string.
MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://host1:27017"));
连接到副本集
MongoDB将自动发现主要和副本。
You can specify the members using theMongoClientURI connection string:
指定两个副本集:
MongoClient mongoClient = new MongoClient( new MongoClientURI("mongodb://host1:27017,host2:27017,host3:27017"));
至少有一个副本集和副本集选项的成员:
MongoClient mongoClient = new MongoClient( new MongoClientURI( "mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myReplicaSet"));
你可以使用ServerAddress指定副本集中的所有成员.
MongoClient mongoClient = new MongoClient(
Arrays.asList(new ServerAddress("host1", 27017),
new ServerAddress("host2", 27017),
new ServerAddress("host3", 27017)));
连接到分片集群
要连接到分片群集,请将mongos实例或多个实例指定给MongoClient构造函数。
连接到一个mongos实例:
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
连接多个 mongos 实例:
MongoClient mongoClient = new MongoClient( new MongoClientURI("mongodb://host1:27017,host2:27017"));
MongoClient mongoClient = new MongoClient(
Arrays.asList(new ServerAddress("host1", 27017),
new ServerAddress("host2", 27017)));
连接选项
您可以使用MongoClientURI或MongoClientOptions或两者来指定连接设置。
例如,您可以在MongoClientURI连接字符串中指定 TLS/SSL和身份验证设置:
MongoClientURI uri = new MongoClientURI("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true");
MongoClient mongoClient = new MongoClient(uri);
您还可以使用MongoClientOptions来指定 TLS/SSL 和MongoCredential的认证信息:
String user; // the user name
String database; // the name of the database in which the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createCredential(user, database, password);
MongoClientOptions options = MongoClientOptions.builder().sslEnabled(true).build();
MongoClient mongoClient = new MongoClient(new ServerAddress("host1", 27017),
Arrays.asList(credential),
options);
这里只是官方给的简单演示连接, 不可直接用于生产环境, 比如: 这里边没有配置读写关注, 读取偏好, 连接池配置等都是默认的. 而这些默认值直接用于生产环境肯定是不行的.
至于生产环境怎么配置, 要根据业务情况来实际分析, 我在后边会提供一个参考.
生产环境配置见: mongodb连接配置实践
参考官方文档:https://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
来源:104.116.116.112.58.47.47.119.119.119.46.99.110.98.108.111.103.115.46.99.111.109.47.106.121.99.98.111.121.47.112.47.49.48.48.55.54.56.53.57.46.104.116.109.108.


猜你喜欢
- 本文实例讲述了Android解析Intent Filter的方法。分享给大家供大家参考。具体分析如下:匿名性质的运行时绑定使得理解Andro
- 本文研究的主要是Hibernate hql查询的相关内容,具体如下。HQL介绍Hibernate语言查询(Hibernate Query L
- 系统需要用到一个导入excel文件的功能,使用poi组件常规方式读取excel时,内存耗尽,OutOfMemoryError,或者读取非常慢
- 一、过滤器(filter)过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求和响应都要通过过
- JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现。获取文件MD5值主要分为
- 如论实施敏捷的团队,或者实施 DevOps 的团队,通过自动化测试提高测试效率和软件质量都是其共同的选择。UI 自动化测试是自动化化测试当中
- 手机或照机拍摄的照片名称通常是”IMG_001.JPG”这种格式,这种文件名称是无意义的。使用照片拍摄时间命名可以让我们在多年以后查找照片时
- 本文实例为大家分享了java实现简单的图书管理系统的具体代码,供大家参考,具体内容如下一、项目分布Book类: 定义了书的一些属性(书名,作
- 字符串遍历String str = "asdfghjkl";1.for(int i=0;i<str.length(
- @Autowired加到接口上但获取的是实现类问题Spring的@Autowired加到接口上但获取的是实现类? &
- Java实现PC微信扫码支付做一个电商网站支付功能必不可少,那我们今天就来盘一盘微信支付。微信支付官方网站业务流程:开发指引文档支付服务开发
- 大部分Java开发者都在使用Map,特别是HashMap。HashMap是一种简单但强大的方式去存储和获取数据。但有多少开发者知道HashM
- 最近一直在写c#的时候一直遇到这个报错,看的我心烦。。。准备记下来以备后续只需。参考博客:https://segmentfault.com/
- 今天的几个目标: 1. 自定义ActionProvider 2. Toolbar ActionBar自定义Menu 3. Toolbar A
- 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用对应的方法,从而让RecyclerView重新绘制页面本次也
- 本文实例为大家分享了C# Email发送邮件的具体代码,供大家参考,具体内容如下//回执地址 var Receipt = &q
- 子类重新实现父类的方法称重写;重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改;仅当返回值为类类型时,重写的方法才可
- 隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。但是,因为隐式转换不需要程序员将一种类型显式强制转换为另一种类型,所以
- 在优雅的使用枚举参数(原理篇)中我们聊过,Spring对于不同的参数形式,会采用不同的处理类处理参数,这种形式,有些类似于策略模式。将针对不
- 预览图一、xml布局<?xml version="1.0" encoding="utf-8"?