MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como capturar a exceção ao criar a instância MongoClient


As conexões do servidor são criadas em encadeamentos daemon. Para encurtar a história, você não poderá verificar os erros relacionados à conexão ao criar o Mongo Client.

Você terá que atrasar sua verificação de conexão quando fizer seu primeiro banco de dados real que envolva uma leitura ou gravação.

Apenas para fins de demonstração para você ter uma idéia.
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 do 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 do thread 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)

Então, envolva o código no bloco try catch com MongoTimeoutException e funcionará bem para verificar erros relacionados à conexão.