MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verwalten von Mongodb-Verbindungen in Java als objektorientiert

In der Anwendung ein einzelner MongoClient Objekt mit einer erforderlichen Anzahl von Verbindungen mithilfe von Verbindungspooling , wird in diesem Fall funktionieren. Der Standardwert des Verbindungspools von 100 , und kann nach Bedarf geändert (oder konfiguriert) werden.

Das Mongo-Client-Objekt kann beim Start der Anwendung erstellt werden und wird nur geschlossen, wenn die Anwendung geschlossen wird. Dies spart die Ressourcen im Zusammenhang mit dem Erstellen einer Verbindung mit den Mongo-Client-Objekten in jeder Sammlungszugriffsklasse.

Dasselbe Mongo-Client-Objekt kann in der gesamten Anwendung verwendet werden. Ein Singleton -Klasse (die eine Instanz des Mongo-Client-Objekts verwaltet) kann von jedem anderen Objekt in der Anwendung zugegriffen werden, das eine Verbindung zum MongoDB-Datenbankserver benötigt.

Was ist Verbindungspooling?

Beispielcode:

/*
 * 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();
    // ...
}

Mongo-Client

MongoClient -Objekt wird verwendet, um eine Verbindung zum MongoDB-Server herzustellen und mithilfe von getDatebase() auf eine Datenbank zuzugreifen Methode und Arbeit mit Sammlungen.

com.mongodb.client.MongoClient Schnittstelle:

Aus der MongoDB Java-Dokumentation :

Die MongoClient-Instanz stellt einen Pool von Verbindungen zur Datenbank dar; Sie benötigen auch bei mehreren Threads nur eine Instanz der Klasse MongoClient.

Der folgende Code erstellt ein MongoDB-Client-Verbindungsobjekt mit Standardeinstellungen wie Host ("localhost") und Port (27017 ), Verbindungspooling usw. und stellt eine Verbindung zu einer MongoDB-Instanz her und erhält Zugriff auf die testDB Datenbank.

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

Mongo-Client-Einstellungen:

Sie können andere Einstellungen explizit mit den MongoClientSettings festlegen um das Verhalten eines MongoClient zu steuern .

MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)

Die ConnectionPoolSettings -Objekt gibt alle Einstellungen an, die sich auf den Pool von Verbindungen zu einem MongoDB-Server beziehen. Die Anwendung erstellt diesen Verbindungspool, wenn das Clientobjekt erstellt wird. ConnectionPoolSettings.Builder ist ein Builder für ConnectionPoolSettings , verfügt über Methoden zum Angeben der Eigenschaften des Verbindungspools. Beispiel:maxSize​(int maxSize) :Die maximal zulässige Anzahl von Verbindungen (Standard ist 100 ). Andere Methoden sind minSize , maxConnectionIdleTime usw.

Code zum Instanziieren eines MongoClient mit Verbindungspooleinstellungen:

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());