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