Java MongoDB检查连接,无异常

Java MongoDB检查连接,无异常,java,mongodb,exception,Java,Mongodb,Exception,我正在使用MongoDB和java。我需要一种方法来检查MongoDB是否正在运行(以防止以后出现异常)。我用以下代码进行了尝试: mongoClient = new MongoClient(); try { mongoClient.getAddress(); mongoRunning = true; } catch (Throwable e){ log.warn("no db connected"); return; } 我知道抛弃是不好的,但它既不例外也不适

我正在使用MongoDB和java。我需要一种方法来检查MongoDB是否正在运行(以防止以后出现异常)。我用以下代码进行了尝试:

mongoClient = new MongoClient();
try {
    mongoClient.getAddress();
    mongoRunning = true;
} catch (Throwable e){
    log.warn("no db connected");
    return;
}
我知道抛弃是不好的,但它既不例外也不适用于抛弃。我明白了(未输入捕捉块!):

我的程序终止了。我以为我懂java:-(。但我也试过:

mongoClient.listDatabases();
这种行为也很奇怪:mongoRunning设置为true,并且异步抛出异常。
我需要一种方法来检查连接一次。这是否可以毫无例外地以同步的方式进行检查?

MongoClient
表示一个连接池。它管理连接以及线程中发生的一切

我认为问“MongoDB是否正在运行”的问题是错误的。假设您有一个工具或仪器来检查它是否正在运行,并且在检查时没有收到任何异常,但在检查MongoDB崩溃后,您会怎么做。即,尝试这样的检查是错误的,而应该以可靠的方式编写应用程序,并在查询时进行适当的错误处理


此外,您可以查看
ConnectionPoolSettings
,它在开始抛出异常之前默认有500个查询。getMaxWaitQueueSize。如果这是导致问题的原因,您可以尝试将其减小到较小的值,以便更早地开始接收异常。

您是否尝试过将构造函数调用放入try块?不,但构造函数从不抛出异常。我的用例是:mongodb对我的应用程序是可选的,如果db不可用,它就不应该尝试持久保存db。我知道可以使用侦听器来获取mongo的实时迹象。但目前我只需要一次同步检查,看看它是否对应用程序是可选的n、 我会在应用程序配置级别上进行此操作。例如,如果环境变量中提供了MONGODB_URL,则执行持久化,如果不执行,则执行持久化。但同时配置了连接URL,有时执行持久化,有时不执行持久化,这不是可选的,这是另外一回事。
mongoClient.listDatabases();