sql >> Database teknologi >  >> NoSQL >> MongoDB

Håndtering af Mongodb-forbindelser i Java som objektorienteret

I applikationen en enkelt MongoClient objekt med et påkrævet antal forbindelser ved hjælp af forbindelsespooling , vil virke i dette tilfælde. Standardværdien for forbindelsespuljen på 100 , og kan ændres (eller konfigureres) efter behov.

Mongo-klientobjektet kan oprettes ved starten af ​​applikationen og lukkes kun, når applikationen lukkes. Dette sparer de ressourcer, der er relateret til at oprette en forbindelse med mongo-klientobjekterne i hver samlingsadgangsklasse.

Det samme mongo-klientobjekt kan bruges i hele applikationen. En singleton klasse (som vedligeholder én forekomst af mongo-klientobjektet) kan tilgås af ethvert andet objekt i applikationen, som har brug for en forbindelse til MongoDB-databaseserveren.

Hvad er forbindelsespooling?

Eksempelkode:

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

MongoClient objekt bruges til at oprette forbindelse til MongoDB-serveren, få adgang til en database ved hjælp af getDatebase() metode og arbejde med samlinger.

com.mongodb.client.MongoClient grænseflade:

Fra MongoDB Java-dokumentationen :

MongoClient-instansen repræsenterer en pulje af forbindelser til databasen; du skal kun bruge én forekomst af klasse MongoClient selv med flere tråde.

Følgende kode opretter et MongoDB-klientforbindelsesobjekt med standardindstillinger, såsom værten ("localhost") og porten (27017 ), forbindelsespooling osv., og opretter forbindelse til en MongoDB-instans og får adgang til testDB database.

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

Mongo-klientindstillinger:

Du kan udtrykkeligt angive andre indstillinger med MongoClientSettings at kontrollere adfærden for en MongoClient .

MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)

ConnectionPoolSettings objekt angiver alle indstillinger, der vedrører puljen af ​​forbindelser til en MongoDB-server. Applikationen opretter denne forbindelsespulje, når klientobjektet oprettes. ConnectionPoolSettings.Builder er en builder til ConnectionPoolSettings , har metoder til at angive egenskaberne for forbindelsespuljen. F.eks. maxSize​(int maxSize) :Det maksimale antal tilladte forbindelser (standard er 100 ). Andre metoder omfatter minSize , maxConnectionIdleTime osv.

Kode for at instantiere en MongoClient med forbindelsespuljeindstillinger:

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. tilpasset redis-klient kompilering mislykkes

  2. findOneAndUpdate forårsager duplikeringsproblem

  3. NoSQL Trends – MongoDB, Cassandra, CouchDB &Riak

  4. mongoDB:hvordan kontrollerer man eksistensen af ​​en diktatnøgle i en indlejret diktat?