我正在尝试连接到我通过mongolab创建的mongo数据库
在mongolab的数据库页面上提到了标准的uri:
我试试这段代码:
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地址。”
怎么了?
答案 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);