我想能够检测一下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 MongoCollectionpeople = 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,其中的hack MongoClient.getDatabaseNames()
会抛出MongoException
if if errors,除了现在已经弃用并替换为MongoClient.listDatabaseNames()
没有相同的错误抛出语义.
有没有办法在try catch块中从java驱动程序执行mongo查询并实际捕获异常?