如何通过Java驱动程序正确连接Atlas M0(免费层)群集?
尝试使用Java驱动程序连接Atlas群集 所以,我写的是:如何通过Java驱动程序正确连接Atlas M0(免费层)群集?,java,mongodb,intellij-idea,Java,Mongodb,Intellij Idea,尝试使用Java驱动程序连接Atlas群集 所以,我写的是: MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true"); MongoClient mongoClient = new MongoClient(uri); 在这种情况下,错误为: java.lang.IllegalArgumentExcepti
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)
我得到一个错误:
com.mongodb.MongoTimeoutException:等待与ReadPreferenceServerSelector{readPreference=primary}匹配的服务器时,30000毫秒后超时。群集状态的客户端视图为{type=UNKNOWN,服务器=[{address=cluster0.mongodb.net:27017,type=UNKNOWN,state=CONNECTING,异常={com.mongodb.MongoSocketException:cluster0.mongodb.net},由{java.net.UnknownHostException:cluster0.mongodb.net}引起]
位于com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:369)
位于com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
位于com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource。(ClusterBinding.java:75)
位于com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource。(ClusterBinding.java:71)
位于com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
位于com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:201)
在com.mongodb.operation.CountOperation.execute上(CountOperation.java:206)
在com.mongodb.operation.CountOperation.execute上(CountOperation.java:53)
位于com.mongodb.Mongo.execute(Mongo.java:772)
位于com.mongodb.Mongo$2.execute(Mongo.java:759)
位于com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:185)
位于com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:170)
在project.Bot.check中(Bot.java:36)
在project.Bot.onUpdateReceived处(Bot.java:103)
forEach(ArrayList.java:1249)
在org.telegrame.telegrambots.generics.LongPollingBot.onUpdatesReceived上(LongPollingBot.java:27)
在org.telegram.telegrambots.updatesReceiver.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)上
在POM文件中,我有依赖项:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.6.0</version>
</dependency>
org.mongodb
有人知道如何解决这个错误吗?我感谢任何帮助。这里似乎有一些问题
首先
3.6.0不是实际加载到应用程序类路径中的Mongo驱动程序库;我怀疑您以前使用的是旧版本,最近更新了POM?您以前使用的是3.2.0版本
我怎么知道的
我开始深入研究代码,您提供的错误消息不在第203行附近。而且,您可以看到上面链接的代码支持+srv
浏览以前的版本,我终于在203行找到了错误信息,返回到
长话短说,尝试做一个专业清理,并重建
如果项目刷新没有帮助,请重新启动Eclipse以获取新的依赖项
秒
MongoTimeoutException:等待服务器时在30000毫秒后超时
这很可能是防火墙/访问控制组配置问题,因为防火墙阻止数据包到达Atlas群集
请参阅。这里似乎有一些问题
首先
3.6.0不是实际加载到应用程序类路径中的Mongo驱动程序库;我怀疑您以前使用的是旧版本,最近更新了POM?您以前使用的是3.2.0版本
我怎么知道的
我开始深入研究代码,您提供的错误消息不在第203行附近。而且,您可以看到上面链接的代码支持+srv
浏览以前的版本,我终于在203行找到了错误信息,返回到
长话短说,尝试做一个专业清理,并重建
如果项目刷新没有帮助,请重新启动Eclipse以获取新的依赖项
秒
MongoTimeoutException:等待服务器时在30000毫秒后超时
这很可能是防火墙/访问控制组配置问题,因为防火墙阻止数据包到达Atlas群集
请参阅。解决了它!
所以,我所做的:
1) 我只尝试通过driver3.6连接到层集群,并编写了
mongodb+srv://user:<PASSWORD>@cluster0-ox90k.mongodb.net/test?retryWrites=true
然后再次获取错误:
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-ox90k.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0-ox90k.mongodb.net}, caused by {java.net.UnknownHostException: cluster0-ox90k.mongodb.net}}]
因此,我通过driver3.4或更早的版本写了类似的文章
mongodb://user:<PASSWORD>@cluster0-shard-00-00-ox90k.mongodb.net:27017,cluster0-shard-00-01-ox90k.mongodb.net:27017,cluster0-shard-00-02-ox90k.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true
另一个使用MongoClients.create()
的变体,如前所述:
注意:密码不需要像mongodb://user:@…
仅以格式mongodb://user:mypassword@…
没有大括号
解决了它!
所以,我所做的:
1) 我只尝试通过driver3.6连接到层集群,并编写了
mongodb+srv://user:<PASSWORD>@cluster0-ox90k.mongodb.net/test?retryWrites=true
然后再次获取错误:
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-ox90k.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0-ox90k.mongodb.net}, caused by {java.net.UnknownHostException: cluster0-ox90k.mongodb.net}}]
因此,我通过driver3.4或更早的版本写了类似的文章
mongodb://user:<PASSWORD>@cluster0-shard-00-00-ox90k.mongodb.net:27017,cluster0-shard-00-01-ox90k.mongodb.net:27017,cluster0-shard-00-02-ox90k.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true
另一个使用MongoClients.create()
的变体,如前所述:
注意:密码不需要像mongodb://user:@…
仅以格式mongodb://user:mypassword@…
没有大括号时,请注意:
在此字符串中:
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
test==>是一个Db名称,在建立此连接之前,Db应该存在。另一个重要注意事项:
在此字符串中:
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
test==>是一个Db名称,在建立此连接之前,Db应该存在。我在尝试从tomcat应用程序连接到MongoDB时遇到了相同的问题。
我使用Mongo驱动程序3.12.3安装了tomcat 9.0和MongoDB 4.2
Error: org.springframework.dao.DataAccessResourceFailureException: Timed out after
30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN,
servers=[{address=@127.0.0.1:27017, type=UNKNOWN, state=CONNECTING, exception=
{com.mongodb.MongoSocketException: @127.0.0.1}, caused by
{java.net.UnknownHostException: @127.0.0.1}}]; nested exception is
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect.
Client view of cluster state is {type=UNKNOWN, servers=[{address=@127.0.0.1:27017,
type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException:
@127.0.0.1}, caused by {java.net.UnknownHostException: @127.0.0.1}}]
我尝试创建示例Java应用程序来连接DB,但它无法从web应用程序连接
因此,为DB创建了用户,并分配了角色userAdmin,这对我很有用
Not working Conn String - mongodb://@127.0.0.1:27017/docs <br>
Working Conn string - mongodb://docs_local:docs@127.0.0.1:27017/docs
连接字符串不工作-mongo
Not working Conn String - mongodb://@127.0.0.1:27017/docs <br>
Working Conn string - mongodb://docs_local:docs@127.0.0.1:27017/docs