MongoClient có pool kết nối nội bộ. Số lượng kết nối tối đa có thể được cấu hình (mặc định là 100). Bạn có thể đặt nó bằng cách sử dụng MongoClientOptions
như thế này:
MongoClientOptions options = MongoClientOptions.builder()
.connectionsPerHost(100)
.autoConnectRetry(true)
.build();
Và sau đó cung cấp các tùy chọn này cho MongoClient (đã kiểm tra nó trong Mongo Java API v2.11.1). Các kết nối trong nhóm được duy trì mở (mở và đóng kết nối thường là một thao tác tốn kém) để chúng có thể được sử dụng lại sau này.
Tôi cũng sẽ cấu trúc lại singleton ứng dụng khách MongoDB của bạn bằng cách sử dụng enum
ví dụ để tránh đặt synchronized
trên phương pháp này.
Đây là bản phác thảo ý tôi muốn nói:
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();
}
}
Sau đó, bạn có thể truy cập cơ sở dữ liệu của mình qua
MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();