W aplikacji pojedynczy MongoClient
obiekt z wymaganą liczbą połączeń, przy użyciu puli połączeń , zadziała w tym przypadku. Domyślna wartość puli połączeń 100
i mogą być modyfikowane (lub konfigurowane) w razie potrzeby.
Obiekt klienta mongo można utworzyć na początku aplikacji i jest zamykany tylko wtedy, gdy aplikacja jest zamknięta. Oszczędza to zasoby związane z tworzeniem połączenia z obiektami klienta mongo w każdej klasie dostępu do kolekcji.
Ten sam obiekt klienta mongo może być używany w całej aplikacji. singiel Klasa (która utrzymuje jedną instancję obiektu klienta mongo) może być dostępna przez dowolny inny obiekt w aplikacji, który wymaga połączenia z serwerem bazy danych MongoDB.
Co to jest łączenie połączeń?
Przykładowy kod:
/*
* 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();
// ...
}
Klient Mongo
MongoClient
obiekt służy do połączenia z serwerem MongoDB, uzyskania dostępu do bazy danych za pomocą getDatebase()
metody i pracy z kolekcjami.
com.mongodb.client.MongoClient
interfejs:
Instancja MongoClient reprezentuje pulę połączeń z bazą danych; będziesz potrzebować tylko jednej instancji klasy MongoClient, nawet z wieloma wątkami.
Poniższy kod tworzy obiekt połączenia klienta MongoDB z ustawieniami domyślnymi, takimi jak host („localhost”) i port (27017
), pule połączeń itp. i łączy się z instancją MongoDB i uzyskuje dostęp do testDB
baza danych.
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Ustawienia klienta Mongo:
Możesz jawnie określić inne ustawienia za pomocą MongoClientSettings
do kontrolowania zachowania MongoClient
.
MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
ConnectionPoolSettings
obiekt określa wszystkie ustawienia, które odnoszą się do puli połączeń z serwerem MongoDB. Aplikacja tworzy tę pulę połączeń podczas tworzenia obiektu klienta. ConnectionPoolSettings.Builder
jest kreatorem ConnectionPoolSettings
, ma metody określania właściwości puli połączeń. Np. maxSize(int maxSize)
:Maksymalna dozwolona liczba połączeń (domyślnie 100
). Inne metody obejmują minSize
, maxConnectionIdleTime
itp.
Kod do utworzenia instancji MongoClient
z ustawieniami puli połączeń:
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());