MongoClient verfügt über einen internen Verbindungspool. Es kann eine maximale Anzahl von Verbindungen konfiguriert werden (Standard ist 100). Sie können es mit MongoClientOptions
festlegen so:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
Geben Sie diese Optionen dann MongoClient (überprüft in Mongo Java API v2.11.1). Verbindungen im Pool werden offen gehalten (das Öffnen und Schließen von Verbindungen ist normalerweise ein teurer Vorgang), damit sie später wiederverwendet werden können.
Ich würde auch Ihren MongoDB-Client-Singleton mit enum
umgestalten zum Beispiel um zu vermeiden, dass synchronized
gesetzt wird auf dieser Methode.
Hier ist eine Skizze dessen, was ich meine:
public enum MongoDB {
INSTANCE;
private static final String MONGO_DB_HOST = "some.mongohost.com";
private Mongo mongo;
private DB someDB;
MongoDB() {
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.readPreference(ReadPreference.secondaryPreferred())
.build();
try {
mongo = new MongoClient(MONGO_DB_HOST, options);
} catch (UnknownHostException e) {
e.printStackTrace();
}
someDB = mongo.getDB("someDB");
//authenticate if needed
//boolean auth = someDB.authenticate("username", "password".toCharArray());
//if(!auth){
// System.out.println("Error Connecting To DB");
//}
}
public DB getSomeDB() {
return someDB;
}
//call it on your shutdown hook for example
public void close(){
mongo.close();
}
}
Anschließend können Sie über
auf Ihre Datenbank zugreifenMongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();