在我的应用程序中,MongoDB
3.2.4运行在自定义端口上,我想实现逻辑,我的应用程序将尝试在自定义端口上达到MongoDB
,如果失败,它将使用默认端口27018
。如何检查是否用Java建立了MongoDB连接?
为了做到这一点我使用下面的代码:
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…*/
}
的问题是,这个异常没有被捕获。在 com.mongodb.connection.InternalStreamConnection异常开口插座在 com.mongodb.connection.SocketStream.open(SocketStream.java:63): 虽然MongoDB
引发以下例外:
com.mongodb.MongoSocketOpenException 。开(InternalStreamConnection.java:114) 在 com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.run(DefaultServerMonitor.java:128) 在java.lang.Thread.run(Thread.java:745)引起的: java.net.ConnectException:连接被拒绝:连接在 java.net.DualStackPlainSocketImpl.waitForConnect(Native Me的ThOD)在 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 )at java.net.Socket.connect(Socket.java:589)at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) at com.mongodb.connect on.SocketStream.open(SocketStream.java:58) ... 3个
我try-catch
表达不能赶上这个例外。
我尝试多种方法,如抓:
Exception
RuntimeException
MongoSocketOpenException
MongoException
MongoCommandException
他们都不工作。
我的问题:
- 我如何检查是否建立
MongoDB
连接? - 怎么能赶上例外
MongoSocketOpenException
?
我同意Frankenapps,那句话不是抛出异常。我认为当你实例化你的客户时,它正在被抛出。赶上那里的例外。 – RubioRic