Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Java驱动程序正确连接Atlas M0(免费层)群集?_Java_Mongodb_Intellij Idea - Fatal编程技术网

如何通过Java驱动程序正确连接Atlas M0(免费层)群集?

如何通过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

尝试使用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)
我得到一个错误:

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