MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment éviter une exception Fin de flux prématurément atteinte à l'aide du pilote Java mongoDB 3.4+ ou 3.6+ ? (lors de l'insertion)

Option 1

L'erreur a été résolue par le format de connexion (en utilisant les paramètres maxIdleTimeMS , ssl et 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");

Ou vous pouvez configurer les informations d'identification par programme (à l'aide du pilote Java 3.6+ versions):

admin - est la base de données où les utilisateurs sont définis dans Atlas ;

user - est le nom d'utilisateur ;

mypassword - est le mot de passe ;

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

Option 2

De plus, l'erreur peut être résolue en appelant mongodb.MongoClient.connect une fois, pas à chaque demande. Essayez de restructurer votre code pour appeler la connexion une fois au lieu de chaque fois lors de l'insertion d'un document spécifique. Dans ce cas, vous pouvez éviter tout paramètre supplémentaire de l'option 1.

Juste assez :

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

Un merci spécial pour l'aide prise en charge de mongoDB .