sql >> Base de Datos >  >> NoSQL >> MongoDB

Administrar conexiones Mongodb en Java como orientado a objetos

En la aplicación, un solo MongoClient objeto con un número requerido de conexiones, usando agrupación de conexiones , funcionará en este caso. El valor predeterminado del grupo de conexiones de 100 , y se puede modificar (o configurar) según sea necesario.

El objeto de cliente mongo se puede crear al inicio de la aplicación y se cierra solo cuando se cierra la aplicación. Esto ahorra los recursos relacionados con la creación de una conexión con los objetos del cliente mongo en cada clase de acceso a la colección.

El mismo objeto de cliente mongo se puede usar en toda la aplicación. Un único Cualquier otro objeto de la aplicación que necesite una conexión con el servidor de la base de datos MongoDB puede acceder a la clase (que mantiene una instancia del objeto del cliente mongo).

¿Qué es la agrupación de conexiones?

Código de ejemplo:

/*
 * Manages the MongoClient object and its settings like host, port, connection pool, etc.
 */
public class DBAccess {

  private static MongoClient mongoClient;
  private static DBAccess dbAccess;

  // MongoClient with default settings
  // NOTE: the code will have only one of the constructors
  //private DBAccess() {
  //    final String connectionString = "mongodb://localhost:27017";
  //    this.mongoClient = MongoClients.create(connectionString);
  //}

  // MongoClient with custom settings.
  // Private constructor, so that the class can be instantiated outside this class.
  // NOTE: the code will have only one of the constructors
  private DBAccess() {

      MongoClientSettings settings =
          MongoClientSettings.builder()
              .applyToConnectionPoolSettings(builder ->
                   builder.maxSize(40).minSize(10))
             .applyToClusterSettings(builder ->
                   builder.hosts(Arrays.asList(new ServerAddress("localhost", 27017))))
            .build();

      mongoClient = MongoClients.create(settings);
  }

  public static MongoClient getConnection() {

      if (dbAccess == null) {
           dbAccess = new DBAccess();   
      }

      return mongoClient;
  }

  public static void closeDatabase() {
      mongoClient.close();
  }
}

/*
 * Class manages a collection.
 */
public class CollectionOneAccess {

  public static String COLLECTION_ONE = "collection_one";
  private MongoCollection<Document> collection;

  public CollectionOneAccess(MongoDatabase db) {    
      collection = db.getCollection(COLLECTION_ONE);
  }

  public void printOneDocument() {
      Document myDoc = collection.find().first();
      System.out.println(myDoc.toJson());
  }

  // other CRUD operations ...

}


// Usage of DBAcess and CollectionOneAccess classes:

private static final String APP_DATABASE = "abc_db";

public static void main(String [] args) {
    MongoDatabase database = DBAccess.getConnection().getDatabase(APP_DATABASE);
    CollectionOneAccess one = new CollectionOneAccess(database);
    one.printOneDocument();
    // ...
}

Cliente Mongo

MongoClient El objeto se usa para conectarse al servidor MongoDB, obtener acceso a una base de datos usando getDatebase() método y trabajo con colecciones.

com.mongodb.client.MongoClient interfaz:

De la documentación de MongoDB Java :

La instancia de MongoClient representa un conjunto de conexiones a la base de datos; solo necesitará una instancia de la clase MongoClient incluso con varios subprocesos.

El siguiente código crea un objeto de conexión de cliente MongoDB con la configuración predeterminada, como el host ("localhost") y el puerto (27017 ), agrupación de conexiones, etc., y se conecta a una instancia de MongoDB y obtiene acceso a testDB base de datos.

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");

Configuración del cliente Mongo:

Puede especificar explícitamente otras configuraciones con MongoClientSettings para controlar el comportamiento de un MongoClient .

MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)

Las ConnectionPoolSettings El objeto especifica todas las configuraciones relacionadas con el grupo de conexiones a un servidor MongoDB. La aplicación crea este grupo de conexiones cuando se crea el objeto de cliente. ConnectionPoolSettings.Builder es un constructor para ConnectionPoolSettings , tiene métodos para especificar las propiedades del grupo de conexiones. Por ejemplo, maxSize​(int maxSize) :El número máximo de conexiones permitidas (el valor predeterminado es 100 ). Otros métodos incluyen, minSize , maxConnectionIdleTime , etc.

Código para instanciar un MongoClient con la configuración del grupo de conexiones:

MongoClientSettings settings = MongoClientSettings.builder()
                                   .applyToConnectionPoolSettings(builder -> 
                                       builder.maxSize(20))
                                   .build();
MongoClient mongoClient = MongoClients.create(settings);
// ...
// Verify the connection pool settings 
System.out.println("Pool size: " + 
    settings.getConnectionPoolSettings().getMaxSize());