Tùy chọn số 1
Lỗi đã được giải quyết bằng định dạng kết nối (sử dụng các tham số maxIdleTimeMS
, ssl
và authSource
):
MongoClient mongoClient = MongoClients.create("mongodb://user:[email protected]:27017,cluster0-shard-00-01-ox90k.mongodb.net:27017,cluster0-shard-00-02-ox90k.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true&maxIdleTimeMS=5000");
Hoặc bạn có thể định cấu hình thông tin xác thực theo lập trình (sử dụng trình điều khiển java 3.6+
phiên bản):
admin
- là cơ sở dữ liệu nơi người dùng được xác định trong Atlas;
user
- là tên người dùng;
mypassword
- là mật khẩu;
MongoCredential credential = MongoCredential.createCredential("user", "admin", "mypassword".toCharArray());
MongoClientSettings settings = MongoClientSettings.builder()
.credential(credential)
.retryWrites(true)
.applyToConnectionPoolSettings(builder ->
builder.maxConnectionIdleTime(5000, TimeUnit.MILLISECONDS))
.applyToSslSettings(builder -> builder.enabled(true))
.applyToClusterSettings(builder -> {
builder.hosts(Arrays.asList(
new ServerAddress("cluster0-shard-00-00-ox90k.mongodb.net", 27017),
new ServerAddress("cluster0-shard-00-01-ox90k.mongodb.net", 27017),
new ServerAddress("cluster0-shard-00-02-ox90k.mongodb.net", 27017)
));
builder.requiredReplicaSetName("Cluster0-shard-0");
})
.build();
MongoClient mongoClient = MongoClients.create(settings);
Tùy chọn số 2
Hơn nữa, lỗi có thể được giải quyết bằng cách gọi mongodb.MongoClient.connect
một lần, không phải từng yêu cầu. Cố gắng cấu trúc lại mã của bạn để gọi kết nối một lần thay vì mỗi lần trong khi chèn tài liệu cụ thể. Trong trường hợp này, bạn có thể tránh bất kỳ thông số bổ sung nào từ tùy chọn số 1.
Vừa đủ:
mongodb+srv://admin:[email protected]/test?retryWrites=true&w=majority
Đặc biệt cảm ơn sự giúp đỡ hỗ trợ mongoDB .