V aplikaci jeden MongoClient
objekt s požadovaným počtem připojení pomocí sdružování připojení , bude v tomto případě fungovat. Výchozí hodnota fondu připojení je 100
a lze je upravit (nebo nakonfigurovat) podle potřeby.
Objekt klienta mongo lze vytvořit při spuštění aplikace a zavře se pouze při zavření aplikace. Tím se ušetří prostředky související s vytvářením připojení s klientskými objekty mongo v každé třídě přístupu ke kolekci.
V celé aplikaci lze použít stejný objekt klienta mongo. singleton třída (která udržuje jednu instanci objektu klienta mongo) může být přístupná z jakéhokoli jiného objektu v aplikaci, který potřebuje připojení k databázovému serveru MongoDB.
Co je sdružování připojení?
Příklad kódu:
/*
* 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
objekt se používá k připojení k serveru MongoDB, získáte přístup k databázi pomocí getDatebase()
metoda a práce s kolekcemi.
com.mongodb.client.MongoClient
rozhraní:
Instance MongoClient představuje fond připojení k databázi; budete potřebovat pouze jednu instanci třídy MongoClient i s více vlákny.
Následující kód vytvoří objekt připojení klienta MongoDB s výchozím nastavením, jako je hostitel ("localhost") a port (27017
), sdružování připojení atd. a připojí se k instanci MongoDB a získá přístup k testDB
databáze.
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Nastavení klienta Mongo:
Další nastavení můžete explicitně zadat pomocí MongoClientSettings
k ovládání chování MongoClient
.
MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
Nastavení ConnectionPoolSettings
objekt určuje všechna nastavení, která se týkají fondu připojení k serveru MongoDB. Aplikace vytvoří tento fond připojení při vytvoření objektu klienta. ConnectionPoolSettings.Builder
je tvůrce pro ConnectionPoolSettings
, má metody pro určení vlastností fondu připojení. Např. maxSize(int maxSize)
:Maximální povolený počet připojení (výchozí je 100
). Mezi další metody patří minSize
, maxConnectionIdleTime
, atd.
Kód pro vytvoření instance MongoClient
s nastavením fondu připojení:
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());