我希望能够检测到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
由于生成的堆栈跟踪包含一些我尝试捕获的异常但我的捕获块仍然没有做任何事情。
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused
我使用的是java mongodb驱动程序3.0.4,我读过的大多数帖子来自较旧的API,其中包含MongoClient.getDatabaseNames()
这样的黑客,如果出现错误会抛出MongoException
,除非现在已弃用并替换为<{1}}没有相同的错误抛出语义。
有没有办法在try catch块中从java驱动程序执行mongo查询并实际捕获异常?
答案 0 :(得分:0)
在新的API中,MongoException
是RuntimeException.
您可以捕获通用MongoException
,或者我相信,listDatabaseNames()
最终会抛出MongoCommandException
最终。
答案 1 :(得分:0)
您可以将System.err
重定向到ByteArrayOutputStream
缓冲区。如果抛出运行时异常,它将被收集到缓冲区中。
请在以下位置查看类似问题的答案:https://stackoverflow.com/a/47699292/7388679