Nell'applicazione, un singolo MongoClient
oggetto con un numero richiesto di connessioni, utilizzando il pooling di connessioni , funzionerà in questo caso. Il valore predefinito del pool di connessioni di 100
e può essere modificato (o configurato) secondo necessità.
L'oggetto client mongo può essere creato all'avvio dell'applicazione e viene chiuso solo quando l'applicazione viene chiusa. Ciò consente di risparmiare le risorse relative alla creazione di una connessione con gli oggetti client mongo in ciascuna classe di accesso alla raccolta.
Lo stesso oggetto client mongo può essere utilizzato in tutta l'applicazione. Un singleton è possibile accedere alla classe (che mantiene un'istanza dell'oggetto client mongo) da qualsiasi altro oggetto nell'applicazione che necessita di una connessione al server di database MongoDB.
Cos'è il pool di connessioni?
Codice di esempio:
/*
* 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();
// ...
}
Cliente Mongo
MongoClient
viene utilizzato per connettersi al server MongoDB, ottenere l'accesso a un database utilizzando getDatebase()
metodo e lavorare con le raccolte.
com.mongodb.client.MongoClient
interfaccia:
Dalla documentazione MongoDB Java :
L'istanza MongoClient rappresenta un pool di connessioni al database; avrai solo bisogno di un'istanza della classe MongoClient anche con più thread.
Il codice seguente crea un oggetto connessione client MongoDB con impostazioni predefinite, come l'host ("localhost") e la porta (27017
), pool di connessioni, ecc. e si connette a un'istanza MongoDB e ottiene l'accesso a testDB
banca dati.
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
Impostazioni client Mongo:
Puoi specificare esplicitamente altre impostazioni con MongoClientSettings
per controllare il comportamento di un MongoClient
.
MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
Le ConnectionPoolSettings
oggetto specifica tutte le impostazioni relative al pool di connessioni a un server MongoDB. L'applicazione crea questo pool di connessioni quando viene creato l'oggetto client. ConnectionPoolSettings.Builder
è un builder per ConnectionPoolSettings
, dispone di metodi per specificare le proprietà del pool di connessioni. Ad esempio, maxSize(int maxSize)
:Il numero massimo di connessioni consentite (l'impostazione predefinita è 100
). Altri metodi includono minSize
, maxConnectionIdleTime
, ecc.
Codice per creare un'istanza di un MongoClient
con le impostazioni del pool di connessioni:
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());