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

Come catturare un'eccezione durante la creazione dell'istanza MongoClient

Le connessioni al server vengono create su thread daemon. Per farla breve non sarai in grado di controllare gli errori relativi alla connessione durante la creazione del client Mongo.

Dovrai ritardare il controllo della connessione quando crei il tuo primo vero database che prevede una lettura o una scrittura.

Solo a scopo dimostrativo per farti un'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 dal thread Demone

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 dal thread principale

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)

Quindi avvolgi il codice in try catch block con MongoTimeoutException e funzionerà bene per controllare gli errori relativi alla connessione.