Esta guía describe cómo utilizar el controlador Java Reactive Streams para conectarse a MongoDB.
Uso el MongoClients.create() Método para realizar una conexión a una implementación de MongoDB en ejecución.
Importante
Los siguientes ejemplos no ofrecen una lista exhaustiva de maneras de instanciar MongoClient un. Para obtener una lista completa de los MongoClient métodos de fábrica, consulte la documentación de la API de MongoClients.
Nota
Recomendamos encarecidamente que las configuraciones de mantenimiento del sistema se configuren con tiempos de espera más cortos.
Consulte la pregunta y respuesta ¿El tiempo de keepalive de TCP afecta las implementaciones de MongoDB? en las Preguntas frecuentes del manual del servidor para obtener más información.
Requisitos previos
Debe configurar los siguientes componentes para ejecutar los ejemplos de código de esta guía:
Una implementación de MongoDB en ejecución a la que conectarse. Por ejemplo, para conectarse a una implementación independiente, debe tener acceso a ella.
Dependencia del controlador instalada en su proyecto. Para saber cómo instalar el controlador, consulte Guía de instalación.
Las siguientes declaraciones de importación:
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
Una instancia MongoClient representa un conjunto de conexiones a la base de datos. Solo se necesita una instancia de MongoClient, incluso al ejecutar varias operaciones simultáneas.
Importante
Normalmente, se crea solo una instancia MongoClient para una implementación de MongoDB, como una implementación independiente, un conjunto de réplicas o un clúster fragmentado, y se usa el cliente en toda la aplicación. Sin embargo, si crea varias instancias, tenga en cuenta lo siguiente:
Todos los límites de uso de recursos (por ejemplo, conexiones máximas) se aplican a cada instancia
MongoClient.Para eliminar una instancia, llame al método
MongoClient.close()para limpiar recursos.
Conectarse a una implementación independiente de MongoDB
El siguiente ejemplo muestra varias formas de conectarse a una única implementación de MongoDB.
Puede conectarse a una única implementación de MongoDB de las siguientes maneras:
Cree una instancia de un objeto
MongoClientsin ningún parámetro para conectarse a un servidor MongoDB que se ejecuta en el host local en el puerto27017:MongoClient mongoClient = MongoClients.create(); Especifique explícitamente
hostnamepara conectarse a una instancia de MongoDB que se ejecuta en el host especificado en el puerto27017:MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne")))) .build()); Especifique explícitamente el
hostnamey elport:MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne", 27018)))) .build()); Especifique
ConnectionString:MongoClient mongoClient = MongoClients.create("mongodb://hostOne:27017");
Conectarse a un set de réplicas
Para conectarse a un conjunto de réplicas, debe especificar uno o más miembros en el MongoClients.create() método. Para obtener más información sobre los conjuntos de réplicas, consulte Replicación en el manual del servidor.
Nota
MongoDB descubre automáticamente los nodos primarios y secundarios en un conjunto de réplicas.
Puede conectarse a un conjunto de réplicas de MongoDB especificando los miembros en un ConnectionString.
El siguiente ejemplo muestra cómo especificar tres miembros del conjunto de réplicas:
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017");
El siguiente ejemplo muestra cómo especificar miembros del conjunto de réplicas y la opción replicaSet con el nombre del conjunto de réplicas:
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myReplicaSet");
El siguiente ejemplo muestra cómo especificar una lista de ServerAddress instancias correspondientes a todos los miembros del conjunto de réplicas:
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());
Conectarse a un 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:
Especifique el nombre de host y el puerto en un
ConnectionString:MongoClient mongoClient = MongoClients.create( "mongodb://localhost:27017" ); Excluir la cadena de conexión si
mongosse ejecuta enlocalhost:27017:MongoClient mongoClient = MongoClients.create();
Puede conectarse a varias instancias mongos de las siguientes maneras:
Especifique
ConnectionStringpara contener sus nombres de host y puertos:MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017"); Especifique una lista de los
ServerAddressobjetos correspondientes a cada instancia:MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList( new ServerAddress("host1", 27017), new ServerAddress("host2", 27017)))) .build());
Opciones de conexión
Puede especificar la configuración de conexión utilizando los tipos ConnectionString o MongoClientSettings, o ambos.
Por ejemplo, puede especificar configuraciones de autenticación y TLS/SSL en la cadena de conexión:
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:
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 la configuración programática:
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);