sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur undviker man ett undantag För tidigt nått slutet av strömmen med mongoDB Java-drivrutin 3.4+ eller 3.6+? (vid insättning)

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 .



  1. Bull queue:När ett jobb misslyckas, hur stoppar man kön från att bearbeta återstående jobb?

  2. Det går inte att installera mongodb på linux

  3. Mongodb matchar karaktärer med accent som underliggande karaktär

  4. Få ett dokument i MongoDB utan att ange insamling