Verifique se o servidor MongoDB está em execução e se as credenciais são válidas em Java
Estou programando uma interface do usuário em que um usuário possa inserir a URL e a porta para verificar se um servidor mongoDB está em execução. Além disso, ele deve ser capaz de fornecer credenciais quando necessário.
Se o servidor não estiver em execução ou as credenciais estiverem erradas, desejo fornecer uma mensagem para cada caso. Perguntas semelhantes foram respondidas aqui:
Verifique a autenticação do MongoDB com o driver Java 3.0
como verificar em um driver, se o servidor mongoDB estiver em execução
Infelizmente, eles usam versões mais antigas do driver Java para o mongo. Estou usando a versão 3.2+ do driver java MongoDB, onde o getDB () está obsoleto.
Minha "solução" para o problema é mais ou menos assim:
try {
String database = "test";
MongoClient client = null;
if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) {
MongoCredential credentials = MongoCredential.createCredential(username, database, password.toCharArray());
client = new MongoClient(new ServerAddress(url, Integer.parseInt(port)), Arrays.asList(credentials));
}
else {
client = new MongoClient(url, Integer.parseInt(port));
}
MongoDatabase db = client.getDatabase(database);
db.listCollectionNames().first();
client.close();
return true;
}
catch (MongoCommandException | MongoSecurityException e) {
// program does not get in here when credentials are wrong,
// only when no credentials are provided, but necessary
}
catch (MongoSocketOpenException | MongoTimeoutException e) {
// only get in here after db.listCollectionNames().first() caused a timeout
}
Como posso gerenciar:
Descobrir quando o servidor mongoDB não está sendo executado?Descubra que as credenciais estão corretas, quando necessário?Editar: Quando as credenciais estão incorretas (nome de usuário e / ou senha), o método captura apenas oMongoTimeoutException
. É o mesmo quando o URL ou porta ou banco de dados errado é fornecido. Para deixar claro, existem outras exceções impressas, mas não capturadas. A única diferença é que, ao fornecer nenhuma senha e nome de usuário, mesmo que o banco de dados exija, então oMongoCommandException
está capturado