首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB毫无例外地检查连接

MongoDB毫无例外地检查连接
EN

Stack Overflow用户
提问于 2018-11-10 21:45:05
回答 1查看 368关注 0票数 0

我将MongoDB与java结合使用。我需要一种方法来检查MongoDB是否正在运行(以防止后面的例外情况)。我用这个代码试了一下:

代码语言:javascript
复制
mongoClient = new MongoClient();
try {
    mongoClient.getAddress();
    mongoRunning = true;
} catch (Throwable e){
    log.warn("no db connected");
    return;
}

我知道投掷是不好的,但它既不例外,也不适用于Throwable。我看到了(没有输入catch块!):

代码语言:javascript
复制
[INFO ] 2018-11-10 22:33:26.209 [cluster-ClusterId{value='5be74e9f7170312fd4eb1ffe', description='null'}-127.0.0.1:27017] cluster - Exception in monitor thread while connecting to server 127.0.0.1:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:67) ~[mongo-java-driver-3.8.2.jar:?]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongo-java-driver-3.8.2.jar:?]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) [mongo-java-driver-3.8.2.jar:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_102]
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[?:1.8.0_102]
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[?:1.8.0_102]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[?:1.8.0_102]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[?:1.8.0_102]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[?:1.8.0_102]
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[?:1.8.0_102]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.8.0_102]
    at java.net.Socket.connect(Socket.java:589) ~[?:1.8.0_102]
    at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongo-java-driver-3.8.2.jar:?]
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:62) ~[mongo-java-driver-3.8.2.jar:?]
    ... 3 more

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

代码语言:javascript
复制
mongoClient.listDatabases();

这也很奇怪: mongoRunning被设置为true,异常被异步抛出。我需要一次检查连接的方法。这是否可能是,没有任何例外,,并以同步的方式?

EN

回答 1

Stack Overflow用户

发布于 2018-11-10 21:58:44

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

我认为“如果MongoDB正在运行”的问题是错误的。假设您有一个工具或工具来检查它是否正在运行,并且在检查时没有收到任何异常,但是在您检查MongoDB崩溃之后,您会做什么?也就是说,尝试这样的检查是错误的,相反,我们应该集中精力以可靠的方式编写应用程序,并在查询时进行适当的错误处理。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53243717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档