Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查是否使用Java建立了MongoDB连接?_Java_Mongodb_Exception Handling_Mongo Java_Mongo Java Driver - Fatal编程技术网

如何检查是否使用Java建立了MongoDB连接?

如何检查是否使用Java建立了MongoDB连接?,java,mongodb,exception-handling,mongo-java,mongo-java-driver,Java,Mongodb,Exception Handling,Mongo Java,Mongo Java Driver,在我的应用程序中,MongoDB 3.2.4在自定义端口上运行,我想实现这样的逻辑:我的应用程序将尝试在自定义端口上访问MongoDB,如果失败,将使用默认的27018端口 为此,我使用以下代码: String mongoClientURI = "mongodb://" + DB_SRV_USR + ":" + DB_SRV_PWD + "@" + DB_URL + ":" + DB_PORT_CUS + "/" + dbName; MongoClientURI connectionString

在我的应用程序中,MongoDB 3.2.4在自定义端口上运行,我想实现这样的逻辑:我的应用程序将尝试在自定义端口上访问MongoDB,如果失败,将使用默认的
27018
端口

为此,我使用以下代码:

String mongoClientURI = "mongodb://" + DB_SRV_USR + ":" + DB_SRV_PWD + "@" + DB_URL + ":" + DB_PORT_CUS + "/" + dbName;
MongoClientURI connectionString = new MongoClientURI(mongoClientURI);

// enable SSL connection
MongoClientOptions.builder().sslEnabled(true).build();

if (this.mongoClient == null) {
    this.mongoClient = new MongoClient(connectionString);
}

// create database if doesn't exist
MongoDatabase mdb = this.mongoClient.getDatabase(dbName);

try {
    this.mongoClient.getAddress();
} catch (com.mongodb.MongoSocketOpenException e) {
    System.out.println("Switch to default port");
    /*…use default port logic…*/
}
问题是这个异常没有被捕获。 尽管MongoDB引发以下异常:

com.mongodb.MongoSocketOpenException:在打开套接字时发生异常 com.mongodb.connection.SocketStream.open(SocketStream.java:63)位于 com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 在 com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunName.run(DefaultServerMonitor.java:128) 在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)中 位于的java.net.socksocketimpl.connect(socksocketimpl.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个以上

我的
try-catch
表达式无法捕获此异常

我尝试了多种方法,例如捕捉:

  • 例外情况
  • RuntimeException
  • MongoSocketOpenException
  • MongoException
  • MongoCommandException
它们都不起作用

我的问题:

  • 如何检查MongoDB连接是否已建立
  • 如何捕获异常
    MongoSocketOpenException
  • 我使用此代码检查连接:

    try {
        mongo.getAddress();
    } catch (Exception e) {
        System.out.println("Database unavailable!");
        mongo.close();
        return;
    }
    
  • 不确定这里我猜是
    this.mongoClient.getAddress()不会抛出那个异常,但我真的不知道

  • 编辑:我通过以下方式初始化它:

    Builder builder = MongoClientOptions.builder().connectTimeout(3000);  
    MongoClient mongo = new MongoClient(new ServerAddress("192.168.0.1", 3000), builder.build());
    

    什么类型的
    mongo
    对象?在我的例子中,
    mongoClient
    是一种类型的
    mongoClient
    。看起来我们使用的对象相同,但构造函数不同。我使用:
    String mongoClientURI=“mongodb://“+DB_SRV_USR+”:“+DB_SRV_PWD+”@“+DB_URL+”:“+DB_PORT_CUS+”/“+dbName;MongoClientURI connectionString=新的MongoClientURI(MongoClientURI);//启用SSL连接MongoClientOptions.builder().sslEnabled(true.build()我刚刚尝试了你的方法,但也没有捕获异常。有更好的方法吗?我同意Frankenapps的观点,那句话没有抛出异常。我认为它是在实例化客户机时抛出的。抓住这里的例外。