文档菜单
文档首页
/ / /
Java反应式流驱动程序
/

连接到MongoDB

在本页

  • 先决条件
  • MongoClient
  • 连接到独立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 实例。

重要

通常,您只为特定的 MongoDB 部署创建一个 MongoClient 实例,例如独立部署、副本集或分片集群,并在您的应用程序中使用该客户端。但是,如果您创建了多个实例,请注意以下事项

  • 所有资源使用限制(例如,最大连接数)都适用于每个 MongoClient 实例。

  • 要销毁实例,请调用 MongoClient.close() 方法来清理资源。

以下示例展示了连接到单个 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());
  • 显式指定 hostnameport

    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" );
  • 如果 mongoslocalhost: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());

您可以使用 ConnectionStringMongoClientSettings 类型,或两者同时使用来指定连接设置。

例如,您可以在连接字符串中指定 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);

返回

教程