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

选择连接目标

本页内容

  • 概述
  • Atlas
  • 本地部署
  • 副本集
  • 初始化
  • API文档

在本指南中,您可以了解如何使用连接字符串和一个MongoClient对象连接到不同类型的MongoDB部署。

要连接到Atlas上的MongoDB部署,请在您的连接字符串中包含以下元素

  • 您的Atlas集群的URL

  • MongoDB用户名

  • MongoDB密码

然后,将您的连接字符串传递给create()方法来构建一个MongoClient对象。

提示

按照Atlas驱动程序连接指南获取您的连接字符串。

当您连接到Atlas时,我们建议使用稳定的API客户端选项,以避免Atlas升级到MongoDB服务器的新版本时出现破坏性更改。有关稳定API功能的更多信息,请参阅MongoDB服务器手册中的稳定API

以下代码演示了如何使用Java反应式流驱动程序连接到Atlas集群。该代码使用serverApi选项指定稳定的API版本。

重要

Reactor库方法

本指南使用了基于Reactive Streams规范构建的Reactor库中的方法。有关安装Reactor的信息,请参阅获取Reactor项目Reactor文档。

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerApi;
import com.mongodb.ServerApiVersion;
import org.bson.BsonDocument;
import org.bson.BsonInt64;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoDatabase;
import org.bson.conversions.Bson;
import reactor.core.publisher.Mono;
public class testing {
public static void main(String[] args) {
// Replace the placeholder with your Atlas connection string
String uri = "<connection string>";
// Construct a ServerApi instance using the ServerApi.builder() method
ServerApi serverApi = ServerApi.builder()
.version(ServerApiVersion.V1)
.build();
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.serverApi(serverApi)
.build();
// Create a new client and connect to the server
try (MongoClient mongoClient = MongoClients.create(settings))
{
MongoDatabase database = mongoClient.getDatabase("<database name>");
Bson command = new BsonDocument("ping", new BsonInt64(1));
Mono.from(database.runCommand(command))
.doOnSuccess(x -> System.out.println("Pinged your deployment. You successfully connected to MongoDB!"))
.doOnError(err -> System.out.println("Error: " + err.getMessage()))
.block();
}
}
}

要连接到本地的MongoDB部署,请使用localhost作为主机名。默认情况下,mongod进程运行在端口27017上,尽管你可以根据您的部署自定义此设置。

以下代码显示了如何使用Java Reactive Streams驱动程序连接到本地MongoDB部署

import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
public class MongoConnection {
public static void main(String[] args) {
String uri = "mongodb://localhost:27017/";
try (MongoClient client = MongoClients.create(uri)) {
// use `client` here
}
}
}

要连接到副本集,请在连接字符串中指定副本集成员的主机名(或IP地址)和端口号。

如果您无法提供副本集中所有主机的完整列表,您可以指定一个或多个主机,并指示Java Reactive Streams驱动程序执行自动发现以找到其他主机。要指示驱动程序执行自动发现,请执行以下操作之一

  • 指定副本集名称为replicaSet参数的值。

  • false指定为directConnection参数的值。

  • 在副本集中指定多个主机。

在以下示例中,驱动程序使用示例连接URI连接到运行在三个不同主机上的MongoDB副本集sampleRS,这些主机包括host1,端口号为27017

import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
public class MongoConnection {
public static void main(String[] args) {
String uri = "mongodb://localhost:27017/?replicaSet=sampleRS";
try (MongoClient client = MongoClients.create(uri)) {
// use `client` here
}
}
}

注意

create() 是非阻塞的

create()方法构造MongoClient非阻塞的。当连接到副本集时,方法会立即返回,同时客户端使用后台线程连接到副本集。

如果您创建了一个MongoClient并立即打印其nodes属性的字符串表示形式,在客户端连接到副本集成员时,列表可能为空。

要初始化一个副本集,您必须直接连接到单个成员。为此,将directConnection连接选项设置为True。您可以通过以下方式实现:

  • 将参数传递给构建MongoClientcreate()方法

  • 在连接字符串中设置参数。

import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
public class MongoConnection {
public static void main(String[] args) {
try (MongoClient client =
MongoClients.create("mongodb://<hostname>:<port>", directConnection=True)){
// use `client` here
}
}
}
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
public class MongoConnection {
public static void main(String[] args) {
String uri = "mongodb://<hostname>:<port>/?directConnection=true";
try (MongoClient client = MongoClients.create(uri)){
// use `client` here
}
}
}

有关在Java Reactive Streams驱动程序中创建MongoClient实例的更多信息,请参阅以下API文档

返回

创建MongoClient