连接到MongoDB
本指南描述了如何使用Java反应式流驱动程序连接到MongoDB。
使用MongoClients.create()
方法连接到正在运行的MongoDB部署。
重要
以下示例并未提供实例化 MongoClient
的所有方法。有关 MongoClient
工厂方法的完整列表,请参阅MongoClients API 文档.
注意
我们 强烈建议 系统保持活动设置应配置为较短的超时时间。
有关更多信息,请参阅服务器手册 FAQ 中的是否TCP保持活动时间会影响MongoDB部署? 问题及答案。
先决条件
您必须设置以下组件以运行本指南中的代码示例
运行中的MongoDB部署以连接到。例如,要连接到独立部署,您必须有权访问运行的独立部署。
您的项目中已安装的驱动依赖项。有关如何安装驱动程序的说明,请参阅安装指南.
以下导入语句
import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.MongoClientSettings; import com.mongodb.ConnectionString; import com.mongodb.ServerAddress; import com.mongodb.MongoCredential; import java.util.Arrays;
MongoClient
MongoClient
实例表示数据库连接池。即使运行多个并发操作,也只需要一个 MongoClient
实例。
重要
通常,您只为特定的 MongoDB 部署创建一个 MongoClient
实例,例如独立部署、副本集或分片集群,并在您的应用程序中使用该客户端。但是,如果您创建了多个实例,请注意以下事项
所有资源使用限制(例如,最大连接数)都适用于每个
MongoClient
实例。要销毁实例,请调用
MongoClient.close()
方法来清理资源。
连接到独立的 MongoDB 部署
以下示例展示了连接到单个 MongoDB 部署的几种方式。
您可以通过以下方式连接到单个 MongoDB 部署
创建一个不带任何参数的
MongoClient
对象,以连接到运行在本地主机上端口27017
的 MongoDB 服务器MongoClient mongoClient = MongoClients.create(); 显式指定
hostname
以连接到运行在指定主机上端口27017
的 MongoDB 实例MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne")))) .build()); 显式指定
hostname
和port
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne", 27018)))) .build()); 指定
ConnectionString
MongoClient mongoClient = MongoClients.create("mongodb://hostOne:27017");
连接到副本集
要连接到副本集,您必须在 MongoClients.create()
方法中指定一个或多个成员。有关副本集的更多信息,请参阅服务器手册中的 复制。
注意
MongoDB 自动发现副本集中的主节点和副节点。
您可以通过指定 ConnectionString
来连接到 MongoDB 副本集。
以下示例展示了如何指定副本集的三个成员
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017");
以下示例展示了如何指定副本集的成员和 replicaSet
选项与副本集名称
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myReplicaSet");
以下示例展示了如何指定与所有副本集成员相对应的 ServerAddress
实例列表
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList( new ServerAddress("host1", 27017), new ServerAddress("host2", 27017), new ServerAddress("host3", 27017)))) .build());
连接到分片集群
要连接到分片集群,请在 mongos
实例或实例上指定到 MongoClients.create()
方法。有关分片集群的更多信息,请参阅服务器手册中的 分片。
您可以通过以下方式连接到单个 mongos
实例
在
ConnectionString
中指定主机名和端口号MongoClient mongoClient = MongoClients.create( "mongodb://localhost:27017" ); 如果
mongos
在localhost:27017
上运行,则可以省略连接字符串MongoClient mongoClient = MongoClients.create();
您可以通过以下方式连接到多个 mongos
实例
在
ConnectionString
中指定它们的主机名和端口号MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017"); 指定与每个实例对应的
ServerAddress
对象的列表MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList( new ServerAddress("host1", 27017), new ServerAddress("host2", 27017)))) .build());
连接选项
您可以使用 ConnectionString
或 MongoClientSettings
类型,或两者同时使用来指定连接设置。
例如,您可以在连接字符串中指定 TLS/SSL 和身份验证设置
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true");
您还可以使用 MongoClientSettings
实例来指定 TLS/SSL,并使用 MongoCredential
类型来存储身份验证信息
String user; // the username 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); MongoClientSettings settings = MongoClientSettings.builder() .credential(credential) .applyToSslSettings(builder -> builder.enabled(true)) .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("host1", 27017)))) .build(); MongoClient mongoClient = MongoClients.create(settings);
在某些情况下,您可能需要结合使用连接字符串和程序性配置
ConnectionString connectionString = new ConnectionString("mongodb://host1:27107,host2:27017/?ssl=true"); CommandListener myCommandListener = ...; MongoClientSettings settings = MongoClientSettings.builder() .addCommandListener(myCommandListener) .applyConnectionString(connectionString) .build(); MongoClient mongoClient = MongoClients.create(settings);