sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo evitar una excepción? ¿Llegó prematuramente al final de la transmisión usando el controlador Java mongoDB 3.4+ o 3.6+? (durante la inserción)

Opción #1

El error fue solucionado por el formato de conexión (usando los parámetros maxIdleTimeMS , ssl y 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");

O puede configurar las credenciales mediante programación (usando el controlador java 3.6+ versiones):

admin - es la base de datos donde se definen los usuarios en Atlas;

user - es el nombre de usuario;

mypassword - es la contraseña;

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

Opción #2

Además, el error se puede resolver llamando a mongodb.MongoClient.connect una vez, no cada solicitud. Intente reestructurar su código para llamar a la conexión una vez en lugar de cada vez durante la inserción de un documento específico. En este caso, puede evitar cualquier parámetro adicional de la opción #1.

Lo suficiente:

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

Un agradecimiento especial por la ayuda soporte mongoDB .