【发布时间】:2016-06-15 08:15:30
【问题描述】:
我的 MongoDB Java 驱动程序有问题(使用驱动程序版本 3.0.4 和 MongoDB 版本 3.2.3)。我正在尝试检查是否打开了与 MongoDB 服务器的连接,如果没有则抛出异常。我应该能够抓住它:
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:17 com.mongodb.diagnostics.logging.JULLogger 日志 信息:使用设置 {hosts=[localhost:27017]、mode=SINGLE、requiredClusterType=UNKNOWN 创建的集群, serverSelectionTimeout='30000 毫秒',maxWaitQueueSize=500} 我们在这儿 2016 年 3 月 2 日 12:24:18 PM com.mongodb.diagnostics.logging.JULLogger 日志 信息:连接到服务器 localhost:27017 时,监视器线程中出现异常 com.mongodb.MongoSocketOpenException:在 com.mongodb.connection.SocketStream.open(SocketStream.java:63) 处打开套接字的异常 com.mongodb.connection.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(Native Method) 在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在 java.net.Socket.connect(Socket.java:589) 在 com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 在 com.mongodb.connection.SocketStream.open(SocketStream.java:58) ... 3 更多
我试图捕捉“com.mongodb.MongoSocketOpenException”、“Exception”和其他一些,但似乎没有任何效果!有人能帮我解决我哪里出错了吗?
【问题讨论】:
-
at java.lang.Thread.run(Thread.java:745)-- 看起来您的异常正在另一个线程中引发。你必须在那里catch它。 -
在 WE ARE HERE 打印后出现,因此您发布的 try/catch 显然不是它发生的地方。
-
是的,这就是我的想法,虽然运行的线程来自 MongoDB 驱动程序库。关于如何访问线程并捕获它的任何想法?无论如何感谢您的帮助。
标签: java mongodb authentication exception driver