(MongoDB Java驱动程序(3.0.0-rc0))UnknownHostException&认证

时间:2015-03-20 23:33:06

标签: java mongodb

最近我开始使用新的MongoDB Java驱动程序(3.0.0-rc0)。目前我有两个问题。

  • ServerAddress 类不再抛出 UnknownHostException ,我使用此异常来确定连接是否成功,我应该为此使用什么现在?

  • DB 类现在成为 MongoDatabase 类。当 DB 类没有被弃用时,我使用 authenticate(String username,char [] password)进行身份验证,但现在我需要使用 MongoCredential < / em> class,如何检查身份验证是否成功?

关于, Julian v.d Berkmortel

1 个答案:

答案 0 :(得分:0)

3.0 Java驱动程序采用

的位置
  • 不在DNS中的主机名
  • 无法访问的主机
  • 身份验证凭据不正确

是严重的应用程序配置错误,通常需要人工干预,因此只能通过在正常使用驱动程序过程中抛出的异常间接地在API中浮出。

因此,在这两种情况下,驱动程序最终都会从需要连接到MongoDB服务器的任何方法抛出MongoTimeoutException。该异常将包含一条消息,指示连接失败的根本原因。例如,以下程序:

    MongoClient mongoClient = new MongoClient(new ServerAddress("unknown-host-name"),
                                              MongoClientOptions.builder()
                                                                .serverSelectionTimeout(5000)
                                                                .build());
    mongoClient.getDatabase("admin").runCommand(new Document("ping", 1));

将抛出此消息的异常:

   Timed out after 30000 ms while waiting for a server that matches
   ReadPreferenceServerSelector{readPreference=primary}. 
   Client view of cluster state is {type=UNKNOWN, 
   servers=[{address=unknown-host-name:27017, type=UNKNOWN, state=CONNECTING, 
   exception={com.mongodb.MongoSocketException: unknown-host-name}, 
   caused by {java.net.UnknownHostException: unknown-host-name}}]