Убедитесь, что сервер MongoDB работает и учетные данные действительны в Java
Я программирую пользовательский интерфейс, где пользователь должен иметь возможность ввести URL-адрес и порт, чтобы проверить, работает ли сервер mongoDB. Кроме того, он должен быть в состоянии предоставить учетные данные, когда это необходимо.
Если сервер не работает или учетные данные неверны, я хочу предоставить сообщение для каждого случая. На подобные вопросы ответили здесь:
Проверьте аутентификацию MongoDB с драйвером Java 3.0
как проверить из драйвера, работает ли сервер mongoDB
К сожалению, они используют более старые версии драйвера Java для Монго. Я использую версию 3.2+ Java-драйвера MongoDB, то есть getDB () устарела.
Мое «решение» проблемы выглядит примерно так:
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
}
Как я могу управлять:
Узнать, когда сервер mongoDB не работает?Выясните, что учетные данные верны, когда это необходимо?Редактировать: Если учетные данные неверны (имя пользователя и / или пароль), метод перехватывает толькоMongoTimeoutException
, То же самое, если указан неправильный URL-адрес, порт или база данных. Чтобы было ясно, есть и другие исключения, распечатанные, но не пойманные. Разница лишь в том, что при отсутствии пароля и имени пользователя, даже если база данных требует их,MongoCommandException
пойман