连接外部mongo数据库(java)

时间:2013-01-12 18:47:38

标签: java mongodb database-connection mlab

我正在尝试连接到我通过mongolab创建的mongo数据库

在mongolab的数据库页面上提到了标准的uri:enter image description here

我试试这段代码:

String uriString = "mongodb://user:password@ds047037.mongolab.com:47037/db_test_01";
MongoURI uri = new MongoURI(uriString);
try {
    DB db = uri.connectDB();
    db.authenticate(uri.getUsername(), uri.getPassword());
    Set<String> colls = db.getCollectionNames();
    for (String s : colls) {
        System.out.println(s);
    }
    System.out.println("done");
    } catch (UnknownHostException e) {
        System.out.println("UnknownHostException: " + e);
    } catch(MongoException me) {
        System.out.println("MongoException: " + me);
    }

但是,我得到UnknownHostException: java.net.UnknownHostException: ds047037.mongolab.com

关于UnknownHostException的文档说:“抛出表示无法确定主机的IP地址。”

怎么了?

2 个答案:

答案 0 :(得分:4)

在堆栈中的某个位置看起来像DNS解析问题。 java.net.UnknownHostException是“抛出,表示无法确定主机的IP地址”。

Java问题

问题可能出在Java本身。有一个known issue with Java and IPv6。您可以尝试将java.net.preferIPv4Stack系统属性设置为true,看看是否能解决问题。

作为启动JVM时java命令的参数:

java -Djava.net.preferIPv4Stack=true YourMainClass

或以编程方式:

System.setProperty("java.net.preferIPv4Stack" , "true");

您还可以尝试升级到最新版本的Java,以获取随附的所有错误修复。

DNS服务器或配置问题

问题还可能出在笔记本电脑/机器上的DNS配置中。您可以使用dig查看DNS查找返回的内容。以下是我从笔记本电脑中获得的输出。您还可以使用this web version of dig查看应该获得的内容。

% dig ds047037.mongolab.com

; <<>> DiG 9.8.3-P1 <<>> ds047037.mongolab.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20375
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ds047037.mongolab.com.     IN  A

;; ANSWER SECTION:
ds047037.mongolab.com.  120 IN  CNAME   ds047037-a.mongolab.com.
ds047037-a.mongolab.com. 120    IN  CNAME   h000432.mongolab.com.
h000432.mongolab.com.   120 IN  CNAME   ec2-46-51-159-130.eu-west-1.compute.amazonaws.com.
ec2-46-51-159-130.eu-west-1.compute.amazonaws.com. 300 IN A 46.51.159.130

;; Query time: 23 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jan 12 13:22:24 2013
;; MSG SIZE  rcvd: 162

如果您确认DNS配置/服务器是问题,则需要determine which DNS servers you're using,然后与所有者/管理员联系或联系您的ISP以确保它们按原样进行配置。

答案 1 :(得分:0)

尝试主机端口,所以:

Mongo mongo = new Mongo("ds047037.mongolab.com", 47037);
DB db = mongo.getDB("db_test_01");
db.authenticate(user, password);