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

Cómo detectar una excepción al crear una instancia de MongoClient

Las conexiones del servidor se crean en subprocesos de daemon. En pocas palabras, no podrá verificar los errores relacionados con la conexión mientras crea el cliente Mongo.

Tendrá que retrasar la verificación de su conexión cuando cree su primera base de datos real que involucre una lectura o escritura.

Solo con fines de demostración para que te hagas una idea.

MongoClient mongoClient = new MongoClient("127.0.34.1", 89);
DB db = mongoClient.getDB("test");
try {
   db.addUser("user", new char[] {'p', 'a', 's', 's'});
} catch(Exception e) { MongoTimeoutException exception}

MongoSocketOpenException de Deamon Thread

INFO: Exception in monitor thread while connecting to server 127.0.34.1:89
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:116)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: connect

MongoTimeoutException del hilo principal

Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=127.0.34.1:89, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, 
caused by {java.net.ConnectException: Connection refused: connect}}]
at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:375)

Así que ajuste el código en el bloque try catch con MongoTimeoutException y funcionará bien para verificar los errores relacionados con la conexión.