Overview
本页包含的代码示例展示了如何使用各种设置将Java Reactive Streams应用程序连接到MongoDB 。
提示
要了解有关此页面上的连接选项的更多信息,请参阅每个部分中提供的链接。
要使用此页面中的连接示例,请将代码示例复制到示例应用程序或您自己的应用程序中。 请务必将代码示例中的所有占位符(例如<Atlas connection string> )替换为 MongoDB 部署的相关值。
重要
项目 Reactor 库
本指南使用 项目 Reactor 库来使用Java Reactive Streams驱动程序方法返回的 Publisher 实例。要学习;了解有关 Project Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的入门。要学习;了解有关 项目 Reactor 库及其使用方法的更多信息,请参阅 Reactor 文档中的入门。要学习有关我们在本指南中如何使用 项目 Reactor 库方法的更多信息,请参阅插入文档指南。
您可以使用以下示例应用程序来测试本页上的代码示例。 要使用示例应用程序,请执行以下步骤:
在 IDE 中创建一个新的Java项目。
在Java项目中安装Java Reactive Streams驱动程序。
在 Java 项目中安装 Project Reactor 库。
复制以下代码并将其粘贴到名为
ConnectionApp.java的新Java文件中。从此页面复制代码示例,并将其粘贴到文件中的指定行。
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 org.bson.Document;
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;
class ConnectionApp { public static void main(String[] args) { //start example code here //end example code here { Bson command = new BsonDocument("ping", new BsonInt64(1)); MongoDatabase database = mongoClient.getDatabase("admin"); Publisher<Document> MonoPublisher = database.runCommand(command);
Mono.from(MonoPublisher) .doOnSuccess(x -> System.out.println("Pinged your deployment. You successfully connected to MongoDB!")) .doOnError(err -> System.out.println("Error: " + err.getMessage())) .block();
//other application code
} }}连接
本地部署
String uri = "mongodb://<hostname>:<port>/";
try (MongoClient mongoClient = MongoClients.create(uri))Atlas
String uri = "<Atlas connection string>";
ServerApi serverApi = ServerApi.builder() .version(ServerApiVersion.V1) .build();
MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString(uri)) .serverApi(serverApi) .build();
try (MongoClient mongoClient = MongoClients.create(settings))副本集(Replica Set)
String uri = "mongodb://<replica set member>:<port>/?replicaSet=<replica set name>";
try (MongoClient mongoClient = MongoClients.create(uri))分片集群
要连接到分片集群,请为MongoClients.create()方法指定一个或多个mongos实例。 要了解有关分片集群的更多信息,请参阅MongoDB MongoDB Server手册中的分片。
您可以通过以下方式连接到单个mongos实例:
在连接string中指定主机名和端口,如以下代码所示:
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>" );如果
mongos在localhost:27017上运行,则排除连接string ,如以下代码所示:MongoClient mongoClient = MongoClients.create();
您可以通过以下方式连接到多个mongos实例:
指定连接string以包含其主机名和端口,如以下代码所示:
MongoClient mongoClient = MongoClients.create("mongodb://<first hostname>:<first port>,<second hostname>:<second port>");指定与每个实例对应的
ServerAddress对象列表,如以下代码所示:MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList( new ServerAddress("<first hostname>", <first port>), new ServerAddress("<second hostname", <second port>)))) .build());
重要
Java Reactive Streams 驱动程序不支持 UnixServerAddress 对象或域套接字连接。要使用域套接字进行连接,请使用 Java Sync Driver。否则,使用 ServerAddress 对象从 Java Reactive Streams 驱动程序进行连接。
连接选项
您可以使用连接string或 MongoClientSettings 类型或同时使用两者来指定连接设置。
示例,您可以在连接string中指定 TLS/SSL 和身份验证设置,如以下代码所示:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true");您还可以使用MongoClientSettings实例指定 TLS/SSL 和MongoCredential类型来存储身份验证信息,如以下代码所示:
String user; // the usernameString database; // the name of the database in which the user is definedchar[] 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);在某些情况下,您可能需要将连接string与编程配置结合使用,如以下代码所示:
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);