使用MongoDB Java驱动程序

时间:2016-03-02 12:56:29

标签: java mongodb authentication exception driver

我遇到了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 ms',maxWaitQueueSize = 500}       我们在这儿       2016年3月2日下午12:24:18 com.mongodb.diagnostics.logging.JULLogger日志       INFO:连接到服务器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(本机方法)     在   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)at   java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)at   java.net.Socket.connect(Socket.java:589)at   com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)     在com.mongodb.connection.SocketStream.open(SocketStream.java:58)     ......还有3个

我试图抓住" com.mongodb.MongoSocketOpenException","例外"和其他一些但似乎没有任何作用!是否有人能够帮助我解决我出错的地方?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

从我可以收集的信息来看,迁移到Mongo 3驱动程序会改变创建Mongo客户端的行为 - 它会变成非阻塞操作,并且只有当您尝试使用它时才能确定您是否确实拥有可用的连接。

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

相关问题