Alternativ #1
Felet löstes av anslutningsformatet (med parametrarna maxIdleTimeMS , ssl och 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");
Eller så kan du konfigurera autentiseringsuppgifterna programmatiskt (med java-drivrutinen 3.6+ versioner):
admin - är databasen där användarna är definierade i Atlas;
user - är användarnamnet;
mypassword - är lösenordet;
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);
Alternativ #2
Dessutom kan felet lösas genom att anropa mongodb.MongoClient.connect en gång, inte varje begäran. Försök att strukturera om din kod till att ringa anslutning en gång istället för varje gång under infogning av ett specifikt dokument. I det här fallet kan du undvika ytterligare parametrar från alternativ #1.
Bara nog:
mongodb+srv://admin:example@sqldat.com/test?retryWrites=true&w=majority
Särskilt tack för hjälpen mongoDB-stöd .