Opsi #1
Kesalahan diselesaikan dengan format koneksi (menggunakan parameter maxIdleTimeMS , ssl dan authSource ):
MongoClient mongoClient = MongoClients.create("mongodb://user:example@sqldat.com: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");
Atau Anda dapat mengonfigurasi kredensial secara terprogram (menggunakan driver java 3.6+ versi):
admin - adalah database tempat pengguna didefinisikan di Atlas;
user - adalah nama pengguna;
mypassword - adalah kata sandinya;
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);
Opsi #2
Selain itu, kesalahan dapat diselesaikan dengan memanggil mongodb.MongoClient.connect sekali, tidak setiap permintaan. Cobalah untuk merestrukturisasi kode Anda untuk memanggil koneksi sekali alih-alih setiap kali selama penyisipan dokumen tertentu. Dalam hal ini, Anda dapat menghindari parameter tambahan apa pun dari opsi #1.
Cukup:
mongodb+srv://admin:example@sqldat.com/test?retryWrites=true&w=majority
Terima kasih khusus atas bantuannya dukungan mongoDB .