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 utilizar un ejemplo de conexión de esta página, copie el ejemplo de código en el
Aplicación de ejemplo 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 deescritura de 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 controlador Java Reactive Streams 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 conectarse a un clúster fragmentado, especifique la mongos instancia o instancias en el MongoClients.create() método. Para obtener más información sobre los clústeres fragmentados, consulte Fragmentación en el manual del servidor.
Puede conectarse a una sola instancia 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();
Puede conectarse a varias instancias mongos de las siguientes maneras:
Especifique la cadena de conexión que contendrá sus nombres de host y 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
Puede especificar la configuración de conexión utilizando la cadena de conexión o los tipos MongoClientSettings, o ambos.
Por ejemplo, puede especificar configuraciones de autenticación y TLS/SSL 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 puede utilizar una instancia 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 necesite combinar una cadena de conexión con la 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);