Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查MongoDB服务器是否正在运行,以及凭据是否在Java中有效_Java_Mongodb_Mongodb Java - Fatal编程技术网

检查MongoDB服务器是否正在运行,以及凭据是否在Java中有效

检查MongoDB服务器是否正在运行,以及凭据是否在Java中有效,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,我正在编写一个UI,用户应该能够输入URL和端口来检查mongoDB服务器是否正在运行。此外,他应该能够在必要时提供证件 如果服务器未运行或凭据错误,我想为每种情况提供一条消息。这里也回答了类似的问题: 不幸的是,他们使用了mongo的Java驱动程序的旧版本。我使用的是MongoDB java驱动程序的3.2+版本,其中不推荐使用getDB() 我对这个问题的“解决方案”看起来有点像这样: try { String database = "test";

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

如果服务器未运行或凭据错误,我想为每种情况提供一条消息。这里也回答了类似的问题:

不幸的是,他们使用了mongo的Java驱动程序的旧版本。我使用的是MongoDB java驱动程序的3.2+版本,其中不推荐使用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

    如果需要更多信息,请告诉我。我知道我可以从
    TimeoutException
    的消息中找到错误原因,然后找到特定的异常原因,但我认为这是一个相当丑陋的解决方案。有什么建议吗?遵循这个解决方案=@SakibSami谢谢你的链接。不幸的是,它没有为我提供解决方案。您甚至需要调用
    client.getAddress()
    来了解
    ServerMonitorListener
    的方法。问题是,它仍然没有提供一种方法来检查MongoDB是否已启动并正在运行,以及凭据是否正确。