sql >> Database >  >> NoSQL >> MongoDB

Mongodb-verbindingen in Java beheren als objectgeoriënteerd

In de applicatie, een enkele MongoClient object met een vereist aantal verbindingen, met behulp van connection pooling , zal in dit geval werken. De standaardwaarde van de verbindingspool van 100 , en kan indien nodig worden gewijzigd (of geconfigureerd).

Het mongo-clientobject kan aan het begin van de toepassing worden gemaakt en wordt alleen gesloten wanneer de toepassing wordt gesloten. Dit bespaart de bronnen die verband houden met het maken van een verbinding met de mongo-clientobjecten in elke collectietoegangsklasse.

Hetzelfde mongo-clientobject kan in de hele toepassing worden gebruikt. Een eenling class (die één instantie van het mongo-clientobject onderhoudt) kan worden geopend door elk ander object in de toepassing dat een verbinding met de MongoDB-databaseserver nodig heeft.

Wat is pooling van verbindingen?

Voorbeeldcode:

/*
 * 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-klant

MongoClient object wordt gebruikt om verbinding te maken met de MongoDB-server, krijg toegang tot een database met behulp van de getDatebase() methode en werk met collecties.

com.mongodb.client.MongoClient interface:

Uit de MongoDB Java-documentatie :

De MongoClient-instantie vertegenwoordigt een pool van verbindingen met de database; je hebt maar één instantie van klasse MongoClient nodig, zelfs met meerdere threads.

De volgende code maakt een MongoDB-clientverbindingsobject met standaardinstellingen, zoals de host ("localhost") en poort (27017 ), pooling van verbindingen, enz., en maakt verbinding met een MongoDB-instantie en krijgt toegang tot de testDB database.

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

Mongo-clientinstellingen:

U kunt expliciet andere instellingen opgeven met de MongoClientSettings om het gedrag van een MongoClient te controleren .

MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)

De ConnectionPoolSettings object specificeert alle instellingen die betrekking hebben op de pool van verbindingen met een MongoDB-server. De toepassing maakt deze verbindingspool wanneer het clientobject wordt gemaakt. ConnectionPoolSettings.Builder is een bouwer voor ConnectionPoolSettings , heeft methoden om de eigenschappen van de verbindingspool op te geven. Bijvoorbeeld maxSize​(int maxSize) :Het maximum aantal toegestane verbindingen (standaard is 100 ). Andere methoden zijn:minSize , maxConnectionIdleTime , enz.

Code om een ​​MongoClient te instantiëren met instellingen voor verbindingspool:

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


  1. MongoDb-fout met php 7 op xampp CodeIgniter

  2. Geoear sorteren op afstand en tijd

  3. Verbinding met Redis-cluster mislukt

  4. Hoe MongoDB-aggregatie in Node.js