Alternativ #1
Felet löstes av anslutningsformatet (med parametrarna maxIdleTimeMS
, ssl
och 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");
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:[email protected]/test?retryWrites=true&w=majority
Särskilt tack för hjälpen mongoDB-stöd .