【发布时间】:2016-01-02 09:36:26
【问题描述】:
我希望能够检测 java 驱动程序中是否有可用的 mongo 服务器,以便像在 JDBC 领域等中那样对任何异常事件做出反应。服务器启动时一切正常,但我正在努力了解为什么检测错误如此困难。我有一种感觉,因为 mongo 客户端在不同的线程中运行并且它不会重新抛出给我或其他什么?
try {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase db = mongoClient.getDatabase("mydb");
// if db is down or error getting people collection handle it in catch block
MongoCollection<Document> people = commentarr.getCollection("people");
} catch (Exception e) {
// handle server down or failed query here.
}
结果是
INFO: Exception in monitor thread while connecting to server localhost:27017
生成的堆栈跟踪包含一些我试图捕获的不同异常,但我的 catch 块仍然没有做任何事情。
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused
我正在使用 java mongodb 驱动程序 3.0.4,我阅读的大多数帖子都来自较旧的 API,其中包含 MongoClient.getDatabaseNames() 之类的 hack,如果出现错误,则会引发 MongoException,但现在已弃用并替换为 MongoClient.listDatabaseNames()没有相同的错误抛出语义。
有没有办法只在 try catch 块中从 java 驱动程序执行一个 mongo 查询并实际捕获异常?
【问题讨论】:
-
@Alexander Kondaurov 你能看看这个答案吗? stackoverflow.com/questions/40813060/…。如果您正在寻找特定的东西,请添加到帖子中。
标签: mongodb-java