我想能够检测一下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 ×1