【发布时间】:2018-11-27 17:06:30
【问题描述】:
尝试使用MongoDB version 3.6通过Java驱动连接Atlas集群。
所以,我是这样写的:
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
在这种情况下,错误是:
java.lang.IllegalArgumentException: The connection string is invalid. Connection strings must start with 'mongodb://'
at com.mongodb.ConnectionString.<init>(ConnectionString.java:203)
at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:176)
at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:158)
at project.Bot.check(Bot.java:30)
at project.Bot.onUpdateReceived(Bot.java:104)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)
当程序以 sn -p 启动时使用 MongoDB 版本 3.6 或更高版本不带+srv:
MongoClientURI uri = new MongoClientURI("mongodb://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0.mongodb.net}, caused by {java.net.UnknownHostException: cluster0.mongodb.net}}]
at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:369)
at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:201)
at com.mongodb.operation.CountOperation.execute(CountOperation.java:206)
at com.mongodb.operation.CountOperation.execute(CountOperation.java:53)
at com.mongodb.Mongo.execute(Mongo.java:772)
at com.mongodb.Mongo$2.execute(Mongo.java:759)
at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:185)
at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:170)
at project.Bot.check(Bot.java:36)
at project.Bot.onUpdateReceived(Bot.java:103)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)
在 POM 文件中我有依赖项:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.6.0</version>
</dependency>
另外,当我开始mongo 时,我的数据库被添加到这个地址mongodb://127.0.0.1:27017,但我添加的集群路径不是为了这个。也许我需要写具体集群的路径或者?
Ofc,我有管理员用户。此外,我可以通过 Compass 连接到我的集群和从 shell。 mongod 进程已启动。仅当我在 IDE 中运行时才会出现此错误。可能是同样的问题here。
有谁知道如何解决这个错误?感谢您的帮助。
【问题讨论】:
-
将“cluster0.mongodb.net”改成准确的IP地址会有帮助吗?
-
@y.bedrov,如果我写一个本地地址,例如?是的,我可以连接到本地地址,但我不知道,为什么 IDE 告诉我错误,可能是命令错误或需要添加一些东西。即使我尝试连接到本地地址,也会出现此错误。
标签: java mongodb intellij-idea