2016-03-02 88 views
2

我遇到了MongoDB Java驱动程序(使用驱动程序版本3.0.4和MongoDB版本3.2.3)的问题。我试图检查一个连接是否打开到MongoDB服务器,如果没有则抛出异常。我应该能够赶上它:使用MongoDB Java驱动程序无法正确处理异常

servName = "Username"; 
servPW = "Password"; 

try { 
    MongoCredential cred = MongoCredential.createCredential(servName, "DatabaseName", servPW.toCharArray()); 

    MongoClient mongo = new MongoClient(new ServerAddress("localhost", 27017), Arrays.asList(cred)); 

} catch (MongoException e){ 
    System.out.println("ERROR"); 
} 

System.out.println("WE ARE HERE"); 

我遇到的问题是,时引发未捕捉到的异常,它似乎是从我不能访问也许一个线程来吗?为了测试,我没有运行Mongo服务器来查看抛出的异常。与此问题类似(MongoDB java driver 3.0 can't catch exception when authenticate)。这是输出:

2016年3月2日下午12时24分十七秒com.mongodb.diagnostics.logging.JULLogger 日志 INFO:与设置{主机=创建集群[本地主机:27017],模式= SINGLE,requiredClusterType = UNKNOWN, serverSelectionTimeout ='30000 ms',maxWaitQueueSize = 500} 我们在这里 Mar 02,2016 12:24:18 PM com.mongodb.diagnostics.logging.JULLogger log INFO:Exception in monitor thread当连接到服务器localhost时:27017 com.mongodb.MongoSocketOpenException:在com.mongodb.connection.SocketStream.open(SocketStream.java:63)上打开套接字的异常处在 com.mongodb.conn ection.InternalStreamConnection.open(InternalStreamConnection.java:114) 在 com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.run(DefaultServerMonitor.java:127) 在java.lang.Thread.run(Thread.java:745) java.net.ConnectException:通过导致连接被拒绝:在java.net.DualStackPlainSocketImpl.waitForConnect(本机方法) 在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 在 java.net.AbstractPlainSocketImpl连接.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at jav java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)at java中的.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) net.Socket.connect(Socket.java:589)at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 。 .. 3更多

我试图赶上“com.mongodb.MongoSocketOpenException”,“异常”和其他一些但似乎没有工作!有人能帮我解决我要去哪里的错误吗?

+0

'at java.lang.Thread.run(Thread.java:745)''''''''''''''''''''''''''''''看起来你的异常正在被另一个线程抛出。你必须在那里“抓”它。 – bradimus

+0

因为我们在这里打印出来,所以你发布的try/catch显然不是它发生的地方。 – duffymo

+0

是的,这是我的想法,运行的线程来自MongoDB驱动程序库。有关我如何访问线程并捕获它的任何想法?还是要谢谢你的帮助。 – Timmymachine109

回答

0

我无法找到这个问题的答案,并不能自己解决。为了解决这个问题我降级到驱动程序版本2.11.1并使用它!

0

从我能收集到的信息来看,迁移到Mongo 3驱动程序会改变创建Mongo Client的行为 - 它将成为一个非阻塞操作,您只会在尝试使用它时发现它是否确实有工作连接。

我看到的这个视频(https://www.mongodb.com/presentations/mongodb-drivers-and-high-availability-deep-dive)建议在创建它之后立即使用客户端来检查它是否成功 - 它建议使用命令来询问连接的服务器是否是“主”(不确定这在Java中是什么)。