在我的应用程序中,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.InternalStreamConnection.open(InternalStreamConnection.java:114) 在 com.mongodb.connection.SocketStream.open(SocketStream.java:63) 在 com.mongodb.connection 的异常打开套接字。 java.lang.Thread.run(Thread.java:745) 处的 DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) 原因:java.net.ConnectException:连接被拒绝:连接在 java.net.DualStackPlainSocketImpl.waitForConnect(Native方法)在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java. net.AbstractPlainSocketImpl。连接(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 个
我的try-catch
表情无法捕捉到这个异常。
我尝试了多种方法,例如捕获:
Exception
RuntimeException
MongoSocketOpenException
MongoException
MongoCommandException
它们都不起作用。
我的问题:
- 如何检查 MongoDB 连接是否已建立?
- 怎样才能捕捉到异常
MongoSocketOpenException
?