Overview
Esta página contiene ejemplos de código que muestran cómo conectar su aplicación Java Reactive Streams a MongoDB con varias configuraciones.
Tip
Para obtener más información sobre las opciones de conexión de esta página, consulta el enlace proporcionado en cada sección.
Para usar un ejemplo de conexión de esta página, copia el ejemplo de código en el
aplicación de muestra o su propia aplicación. Asegúrese de reemplazar todos los marcadores de posición en los ejemplos de código, como <Atlas
connection string>, con los valores relevantes para su implementación de MongoDB.
Importante
Proyecto Reactor librería
Esta guía utiliza la biblioteca Project Reactor para consumir Publisher instancias devueltas por los métodos del controlador Java Reactive Streams. Para obtener más información sobre la biblioteca Project Reactor y cómo usarla, consulte Introducción en la documentación de Reactor. Para obtener más información sobre cómo usamos los métodos de la biblioteca Project Reactor en esta guía, consulte Guía Guardar datos en MongoDB.
Puede utilizar la siguiente aplicación de muestra para probar los ejemplos de código en esta página. Para usar la aplicación de muestra, siga los siguientes pasos:
Crea un nuevo proyecto Java en tu IDE.
Instale el driver de Reactive Streams de Java en su proyecto Java.
Instale la biblioteca Project Reactor en su proyecto Java.
Copie el siguiente código y péguelo en un nuevo archivo Java llamado
ConnectionApp.java.Copia un ejemplo de código de esta página y pégalo en las líneas especificadas del archivo.
1 import com.mongodb.ConnectionString; 2 import com.mongodb.MongoClientSettings; 3 import com.mongodb.ServerApi; 4 import com.mongodb.ServerApiVersion; 5 6 import org.bson.BsonDocument; 7 import org.bson.BsonInt64; 8 import org.bson.Document; 9 10 import com.mongodb.reactivestreams.client.MongoClient; 11 import com.mongodb.reactivestreams.client.MongoClients; 12 import com.mongodb.reactivestreams.client.MongoDatabase; 13 import org.bson.conversions.Bson; 14 import reactor.core.publisher.Mono; 15 16 class ConnectionApp { 17 public static void main(String[] args) { 18 //start example code here 19 20 //end example code here 21 { 22 Bson command = new BsonDocument("ping", new BsonInt64(1)); 23 MongoDatabase database = mongoClient.getDatabase("admin"); 24 Publisher<Document> MonoPublisher = database.runCommand(command); 25 26 Mono.from(MonoPublisher) 27 .doOnSuccess(x -> System.out.println("Pinged your deployment. You successfully connected to MongoDB!")) 28 .doOnError(err -> System.out.println("Error: " + err.getMessage())) 29 .block(); 30 31 //other application code 32 33 } 34 } 35 }
Conexión
Implementación local
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))
Set de réplicas
String uri = "mongodb://<replica set member>:<port>/?replicaSet=<replica set name>"; try (MongoClient mongoClient = MongoClients.create(uri))
Clúster fragmentado
Para conectarte a un clúster fragmentado, especifica la instancia o instancias mongos en el método MongoClients.create(). Para obtener más información sobre clústeres, consulte Particionado en el manual del Servidor.
Puedes conectarte a una sola instancia de mongos de las siguientes maneras:
Especifica el hostname y el puerto en una cadena de conexión, como se muestra en el siguiente código:
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>" ); Excluye la cadena de conexión si
mongosse ejecuta enlocalhost:27017, como se muestra en el siguiente código:MongoClient mongoClient = MongoClients.create();
Puedes conectarte a varias instancias de mongos de las siguientes maneras:
Specifique que la cadena de conexión contenga los nombres de host y los puertos, como se muestra en el siguiente código:
MongoClient mongoClient = MongoClients.create("mongodb://<first hostname>:<first port>,<second hostname>:<second port>"); Especifique una lista de los
ServerAddressobjetos correspondientes a cada instancia, como se muestra en el siguiente código: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());
Importante
El controlador Java Reactive Streams no admite objetos UnixServerAddress ni conexiones de socket de dominio. Para usar un socket de dominio para conectarse, utilice el controlador Java Sync. De lo contrario, utilice un objeto ServerAddress para conectarse desde el controlador Java Reactive Streams.
Opciones de conexión
Puedes especificar la configuración de la conexión utilizando la cadena de conexión o los tipos MongoClientSettings, o ambos.
Por ejemplo, puedes especificar los ajustes de TLS/SSL y autenticación en la cadena de conexión, como se muestra en el siguiente código:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true");
También puedes utilizar una instancia de MongoClientSettings para especificar TLS/SSL y el tipo MongoCredential para almacenar la información de autenticación, como se muestra en el siguiente código:
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);
En algunos casos, es posible que necesites combinar una cadena de conexión con una configuración programática, como se muestra en el siguiente código:
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);