nhưng điều này có vẻ như nó sẽ đánh bại mục đích kết nối pooling.If chỉ một người dùng sẽ có thể truy cập vào đậu mà chứa dụ MongoClient cùng một lúc, chắc chắn nhiều kết nối trong hồ bơi sẽ không bao giờ được sử dụng cùng một lúc.
Các javadoc
nói:
Người tài xế Java MongoDB là chủ đề an toàn. Nếu bạn đang sử dụng trong một môi trường phục vụ web, ví dụ, bạn nên tạo một cá thể đơn MongoClient và bạn có thể sử dụng nó trong mọi yêu cầu. Đối tượng MongoClient duy trì một nhóm kết nối nội bộ với cơ sở dữ liệu (kích thước nhóm tối đa mặc định là 100). Đối với mọi yêu cầu đến DB (tìm, chèn, v.v.), chuỗi Java sẽ nhận được kết nối từ hồ bơi, thực hiện thao tác và giải phóng kết nối. Điều này có nghĩa là kết nối (ổ cắm) được sử dụng có thể khác nhau mỗi lần.
Vì vậy, khi bạn tạo một singleton với ứng dụng khách trong đó. Nó có thể được tái sử dụng như đã đề cập trong Javadoc. Không cần đồng bộ hóa vì nó là an toàn.
Tôi làm cách nào để chỉ có một ví dụ trên toàn bộ ứng dụng của mình?
Một trong những triển khai có thể là:
public enum ConnectionFactory {
CONNECTION;
private MongoClient client = null;
private ConnectionFactory() {
try {
client = new MongoClient();
} catch (Exception e) {
// Log it.
}
}
public MongoClient getClient() {
if (client == null)
throw new RuntimeException();
return client;
}
}
và sử dụng máy khách như, trong suốt ứng dụng. Connection pooling
sẽ được xử lý theo số MongoClient
như được ghi lại.
MongoClient client = ConnectionFactory.CONNECTION.getClient();
hoặc sử dụng các chú thích @Singleton:
@Singleton
public class SingletonA {
}
Tham khảo: http://tomee.apache.org/singleton-example.html
nó sẽ đánh bại mục đích kết nối tổng hợp – ControlAltDel
Bạn đang sử dụng Spring để tạo ứng dụng khách mongo ?? – Suvasis
Không, tôi không sử dụng Spring Tôi đang sử dụng JavaEE, xin lỗi tôi nên đặt câu hỏi đó (tôi đã thêm nó vào thẻ và sẽ cập nhật tiêu đề câu hỏi) –