Os construtores do MongoClient não lançam nenhuma exceção relacionada à conectividade. Em vez disso, eles retornam imediatamente após iniciar um ou mais threads em segundo plano que tentam estabelecer uma conexão e autenticar com base nas credenciais fornecidas.
É somente quando um aplicativo usa o MongoClient para realizar alguma operação no servidor MongoDB que uma exceção será lançada. No entanto, essa exceção é uma exceção de tempo limite genérico que indica que o driver falhou ao localizar um servidor adequado para a operação antes que o tempo limite de seleção do servidor expire. Por exemplo:
MongoClient client = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27018")),
singletonList(MongoCredential.createCredential("username",
"admin",
"bad".toCharArray())),
MongoClientOptions.builder().serverSelectionTimeout(1000).build());
try {
client.getDB("admin").command("ping");
} catch (MongoTimeoutException e) {
// do something
}
lançará um MongoTimeoutException após 1 segundo. Embora nenhuma MongoSecurityException seja lançada, a mensagem da MongoTimeoutException conterá detalhes relevantes. Por exemplo, ao se conectar a uma réplica de três membros definida quando um dos servidores está inativo e a autenticação falhou nos dois restantes, o campo de mensagem do MongoTimeoutException será algo como:
Expirou após 1000 ms enquanto aguardava por um servidor que corresponda aReadPreferenceServerSelector{readPreference=primary}. A visualização do cliente do estado do cluster é {type=UNKNOWN, servers=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException:Exception opensocket}, causado por {java.net.ConnectException:Conexão recusada}},{address=localhost:27018, type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSecurityException:Exceptionauthenticating MongoCredential{mechanism=null, userName='username',source='admin', password=, mecanismoProperties={}}}, causado por{com.mongodb.MongoCommandException:Falha no comando com o erro 18:'Falha na autenticação.' no servidor localhost:27018. A resposta completa é { "ok" :0.0, "code" :18, "errmsg" :"Falha na autenticação." }}}]