java mongodb 驱动如何捕获异常?

问题描述 投票:0回答:2

我希望能够检测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 查询并实际捕获异常?

mongodb-java
2个回答
0
投票

在新的API中,

MongoException
是一个
RuntimeException.
,你可以捕获通用的
MongoException
,或者我相信,
listDatabaseNames()
最终会抛出一个
MongoCommandException


0
投票

您可以将

System.err
重定向到
ByteArrayOutputStream
缓冲区。如果抛出运行时异常,则会将其收集到缓冲区中。 请参阅类似问题的答案:https://stackoverflow.com/a/47699292/7388679

© www.soinside.com 2019 - 2024. All rights reserved.