如何使用Java建立MongoDB连接? [英] How to check if MongoDB connection is established with Java?

查看:496
本文介绍了如何使用Java建立MongoDB连接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中, MongoDB 3.2.4在自定义端口上运行,我想实现逻辑,我的应用程序将试图达到 MongoDB 在自定义端口,如果失败,它将使用默认的 27018 端口。

In my app, MongoDB 3.2.4 runs on a custom port, I want to implement logic where my app will try to reach MongoDB on a custom port and if it fails it will use the default 27018 port.

为了做到这一点,我使用以下代码:

In order to do that I use the following code:

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 抛出以下异常:

The problem is that this exception is not caught. Although MongoDB throws the following exception:


com.mongodb。 MongoSocketOpenException:
com.mongodb.connection.SocketStream.open(SocketStream.java:63)的异常打开套接字
com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)

com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.run(DefaultServerMonitor.java:128)
在java.lang.Thread.run(Thread.java:745)导致:
java.net.ConnectException:连接拒绝: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.AbstractPlainS ocketImpl.connect(AbstractPlainSocketImpl.java:188)
在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更多

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

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

my try-catch expression can't catch this exception.

我尝试了多种方法,例如:抓取:

I tried multiple approaches, such as to catch:


  • 异常

  • RuntimeException

  • MongoSocketOpenException

  • MongoException

  • MongoCommandException

  • Exception
  • RuntimeException
  • MongoSocketOpenException
  • MongoException
  • MongoCommandException

没有一个不起作用。

我的问题:


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

  2. 如何捕获异常 MongoSocketOpenException ?<
  1. How can I check if MongoDB connection is established?
  2. How can catch the exception MongoSocketOpenException?


推荐答案


  1. 我使用这段代码检查连接: / p>

  1. I use this code to check connection:

try {
    mongo.getAddress();
} catch (Exception e) {
    System.out.println("Database unavailable!");
    mongo.close();
    return;
}


  • 不确定这里我的猜测是 this.mongoClient.getAddress(); 不会抛出该异常,但我不太了解

  • Not sure here my guess would be that this.mongoClient.getAddress(); does not throw that exception, but I don't really know

    编辑:我初始化了:

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

    这篇关于如何使用Java建立MongoDB连接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆