检查MongoDB服务器是否正在运行,凭据在Java

时间:2015-10-27 13:54:12

标签: java mongodb mongodb-java

我正在编写一个UI,用户应该可以在其中放入URL和端口来检查mongoDB服务器是否正在运行。此外,他应该能够在必要时提供证书。

如果服务器没有运行或凭据错误,我想为每个案例提供一条消息。这里回答了类似的问题:

Check MongoDB authentication with Java 3.0 driver

how to check from a driver, if mongoDB server is running

不幸的是,他们使用旧版本的Java驱动程序来支持mongo。我正在使用3.2+版本的MongoDB java驱动程序,即不推荐使用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
    }

我该如何设法:

  1. 找出mongoDB服务器何时没有运行?
  2. 在必要时找出凭据是否正确?
  3. 修改 凭据错误(用户名和/或密码)时,该方法仅捕获MongoTimeoutException。提供错误的URL或端口或数据库时也是如此。要清楚的是,还有其他例外情况打印出来但没有被抓住。唯一不同的是,当提供无密码且没有用户名时,即使数据库需要它们,也会抓住MongoCommandException

0 个答案:

没有答案