MongoClient में आंतरिक कनेक्शन पूल है। कनेक्शन की अधिकतम संख्या कॉन्फ़िगर की जा सकती है (डिफ़ॉल्ट 100 है)। आप इसे MongoClientOptions
. का उपयोग करके सेट कर सकते हैं इस तरह:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
और फिर इन विकल्पों को MongoClient को दें (इसे Mongo Java API v2.11.1 में चेक किया गया)। पूल में कनेक्शन खुले रहते हैं (कनेक्शन खोलना और बंद करना आमतौर पर एक महंगा ऑपरेशन होता है) ताकि बाद में उनका पुन:उपयोग किया जा सके।
मैं enum
. का उपयोग करके आपके MongoDB क्लाइंट सिंगलटन को भी रिफैक्टर करूंगा उदाहरण के लिए synchronized
putting डालने से बचने के लिए इस विधि पर।
यहाँ मेरा क्या मतलब है इसका एक स्केच है:
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();
}
}
फिर, आप
. के माध्यम से अपने डेटाबेस तक पहुंच सकते हैंMongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();