小编rev*_*ind的帖子

java mongodb驱动程序如何捕获异常?

我想能够检测一下mongo服务器是否可以从java驱动程序中获取,以便对任何异常事件作出反应,就像在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.
    }
Run Code Online (Sandbox Code Playgroud)

结果是

INFO: Exception in monitor thread while connecting to server localhost:27017
Run Code Online (Sandbox Code Playgroud)

由此产生的堆栈跟踪包含一些我试图捕获的不同异常但我的catch块仍然没有做任何事情.

com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused
Run Code Online (Sandbox Code Playgroud)

我使用的是java mongodb驱动程序3.0.4,我读过的大多数帖子都来自较旧的API,其中的hack MongoClient.getDatabaseNames()会抛出MongoExceptionif if errors,除了现在已经弃用并替换为MongoClient.listDatabaseNames()没有相同的错误抛出语义.

有没有办法在try catch块中从java驱动程序执行mongo查询并实际捕获异常?

mongodb-java

11
推荐指数
1
解决办法
4697
查看次数

标签 统计

mongodb-java ×1