Recibo este error en una llamada de find (controlador Java predeterminado) después de un período de inactividad. Intenté agregar un latido manual (escribiendo en una colección limitada), pero no sirvió de nada. Solo tengo el problema mientras estoy conectado a una instancia en redacción (es decir, no en un contexto local).
La versión de MongoDB es 3.2.8, el controlador más reciente (3.3), con Java 8.
Alguna idea ?
Lo encontré en alguna documentación:
Para aplicaciones de ejecución prolongada, a menudo es prudente habilitar "keepAlive" con una cantidad de milisegundos. Sin él, después de un período de tiempo, puede comenzar a ver errores de "conexión cerrada" por lo que parece no tener ningún motivo.
Compruebe si esto ayuda. Cuando se conecta a mongoDB, puede pasarle opciones de socket. Soy del fondo del nodo, usamos las siguientes opciones para mantenerlo vivo.
server: { socketOptions: { keepAlive: 100, connectTimeoutMS: 30000 } }¡¡Espero que esto ayude!!
Resuelvo este problema configurando sslEnabled en verdadero, ejemplo de código:
@Bean public MongoClient mongoClient() { List<ServerAddress> saList = new ArrayList<>(); saList.add(new ServerAddress("cluster0-shard-00-00-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-01-75shm.gcp.mongodb.net", 27017)); saList.add(new ServerAddress("cluster0-shard-00-02-75shm.gcp.mongodb.net", 27017)); char[] pwd = "password".toCharArray(); MongoCredential credential = MongoCredential.createCredential("username", "admin", pwd); //set sslEnabled to true here MongoClientOptions options = MongoClientOptions.builder() .readPreference(ReadPreference.primaryPreferred()) .retryWrites(true) .requiredReplicaSetName("Cluster0-shard-0") .maxConnectionIdleTime(6000) .sslEnabled(true) .build(); MongoClient mongoClient = new MongoClient(saList, credential, options); return mongoClient; }Adición: mi jar de cliente es org.mongodb.mongodb-driver 3.6.4, el servidor es mongodb atlas M0 3.6.6 en GCP
Edite application.properties así:
spring.data.mongodb.uri = mongodb+srv://username:password@solarsystem-1tpu0.mongodb.net/dbnamePara instancias regulares de mongo (no agrupadas) use esto:
spring.data.mongodb.uri = mongodb://username:password@solarsystem-shard-00-00-1tpu0.mongodb.net:27017,hostname2:27017/dbname?ssl=true