java - 如何检查是否与 Java 建立了 MongoDB 连接?

标签 java mongodb exception mongo-java-driver mongo-java

在我的应用程序中,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: Exception opening socket at com.mongodb.connection.SocketStream.open(SocketStream.java:63) at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) at java.lang.Thread.run(Thread.java:745) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at 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) at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ... 3 more

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

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

  • 异常
  • 运行时异常
  • MongoSocketOpenException
  • MongoException
  • MongoCommandException

它们都不起作用。

我的问题:

  1. 如何检查 MongoDB 连接是否建立?

  2. 如何捕获异常MongoSocketOpenException

最佳答案

  1. 我使用这段代码来检查连接:

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

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

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

关于java - 如何检查是否与 Java 建立了 MongoDB 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527991/

相关文章:

node.js - mongodb使用json更新同一行的多个字段

c# - 我没有关闭以前的 DataReader,但是在哪里?

java - (Java) Jtable 操作和异常

java - 良好做法 : How to handle keystore passwords in android/java?

java - java中绘制图像时jFrame GetGraphics为空

java - 列表循环JavaFx

java - 在java中执行后台任务

node.js - mongodb/mongoose 聚合或返回 null

performance - 如何在 MongoDB 中关闭(临时)索引

c# - 如何抛出异常并添加包含键和值的我自己的消息?