MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come evitare un'eccezione Fine del flusso raggiunta prematuramente utilizzando il driver Java mongoDB 3.4+ o 3.6+? (durante l'inserimento)

Opzione n. 1

L'errore è stato risolto dal formato della connessione (usando i parametri maxIdleTimeMS , ssl e 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");

Oppure puoi configurare le credenziali a livello di codice (usando il driver java 3.6+ versioni):

admin - è il database in cui gli utenti sono definiti in Atlas;

user - è il nome utente;

mypassword - è la password;

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);

Opzione n. 2

Inoltre, l'errore può essere risolto chiamando mongodb.MongoClient.connect una volta, non ogni richiesta. Prova a ristrutturare il tuo codice per chiamare la connessione una volta invece di ogni volta durante l'inserimento di un documento specifico. In questo caso, puoi evitare qualsiasi parametro aggiuntivo dall'opzione #1.

Quanto basta:

mongodb+srv://admin:[email protected]/test?retryWrites=true&w=majority

Un ringraziamento speciale per l'aiuto supporto mongoDB .