检查MongoDB服务器是否正在运行,以及凭据是否在Java中有效
我正在编写一个UI,用户应该能够输入URL和端口来检查mongoDB服务器是否正在运行。此外,他应该能够在必要时提供证件 如果服务器未运行或凭据错误,我想为每种情况提供一条消息。这里也回答了类似的问题: 不幸的是,他们使用了mongo的Java驱动程序的旧版本。我使用的是MongoDB java驱动程序的3.2+版本,其中不推荐使用getDB() 我对这个问题的“解决方案”看起来有点像这样:检查MongoDB服务器是否正在运行,以及凭据是否在Java中有效,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,我正在编写一个UI,用户应该能够输入URL和端口来检查mongoDB服务器是否正在运行。此外,他应该能够在必要时提供证件 如果服务器未运行或凭据错误,我想为每种情况提供一条消息。这里也回答了类似的问题: 不幸的是,他们使用了mongo的Java驱动程序的旧版本。我使用的是MongoDB java驱动程序的3.2+版本,其中不推荐使用getDB() 我对这个问题的“解决方案”看起来有点像这样: try { String database = "test";
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
}
我怎样才能做到:
编辑:
当凭据错误(用户名和/或密码)时,该方法仅捕获
MongoTimeoutException
。当提供错误的URL、端口或数据库时,情况也是如此。需要说明的是,还有其他一些例外情况打印出来了,但没有被捕获。唯一的区别是,当不提供密码和用户名时,即使数据库需要它们,也会捕获MongoCommandException
,如果需要更多信息,请告诉我。我知道我可以从TimeoutException
的消息中找到错误原因,然后找到特定的异常原因,但我认为这是一个相当丑陋的解决方案。有什么建议吗?遵循这个解决方案=@SakibSami谢谢你的链接。不幸的是,它没有为我提供解决方案。您甚至需要调用client.getAddress()
来了解ServerMonitorListener
的方法。问题是,它仍然没有提供一种方法来检查MongoDB是否已启动并正在运行,以及凭据是否正确。