正在尝试使用MongoDB 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)
当程序以使用MongoDB 3.6版或更高版本的snippet开始时,不使用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中运行时,才会出现此错误。这里可能也有同样的问题。
有人知道如何解决这个错误吗?谢谢你的帮助。
还有一个重要提示:在这个字符串中:
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
测试==
这里似乎有一些问题
第一
3.6.0不是实际加载到您的应用程序类路径中的Mongo驱动程序库;我怀疑您以前使用旧版本进行测试,最近更新了POM?您以前使用的是3.2.0版本。
我怎么知道的?
我开始挖掘代码,在3.6.0版本中,您提供的错误信息离第203行很远。而且,您可以看到上面链接的代码支持srv
。
浏览之前的版本,我终于在第203行,即3.2.0版上找到了错误信息。
长话短说,试着做一个马文清洁,然后重建。
如果项目刷新没有帮助,请重新启动Eclipse以获取新的依赖项。
第二
MongoTimeoutException:等待服务器时在30000毫秒后超时
这很可能是防火墙/访问html" target="_blank">控制组配置问题,因为防火墙阻止数据包到达Atlas群集。
请参见将地址添加到白名单。
解决了!所以,我所做的:
>
蒙古srv://user:@cluster0-ox90k.mongodb.net/test?retryWrites=true
我总是遇到一个错误:连接字符串必须以“mongodb://”开头。
。
好的,我删除了片段srv
,并以同样的方式编写
mongodb://user:@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
最终它解决了。
注意:通过将Java驱动程序设置为“3.4或更高版本”,可以从Atlas管理控制台获取此连接字符串。这将帮助您避免自己想出连接字符串。
更新:如果你想使用驱动程序3.7
,你需要写而不是格式连接(并避免我上面的问题)
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
另一个使用MongoClients的变体。create()
(从3.7版本开始),如下所述:
MongoClient mongoClient = MongoClients.create("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
注意:密码需要写的不一样mongoDB://user:
只是格式
mongodb://user:mypassword@...
没有大括号
我正在尝试使用本教程连接Oracle数据库。当我使用命令行:java-cp c:\jdbc-test\ojdbc6.jar;c:\jdbc-test OracleJDBC我已经将ojdbc6.jar与OracleJDBC.java放在同一个文件夹中。现在我需要在Eclipse上运行它,但它给我一个错误: 是因为OJDBC6.jar位置吗?
我使用JBoss作为7.1.1.final作为我的应用程序服务器。 我已经在JBoss社区用户论坛上发布了我的问题:question-here jboss-as-cmt war工作得很好,即我能够将客户添加到发票中。我可以psql进入数据库引擎,我可以看到所有的记录。我唯一的问题是我不能使用h2console webapp进入我创建的jboss-as-cmt postgres数据库。 我使用:“o
使用Morphia和mongo java驱动程序,我正在连接mongo服务器: 其中serverAddressList是主机:端口列表和使用kerberos身份验证的mongoCredential创建为: 我想使用以下参数设置自定义连接池参数: maxPoolSize 最小池大小 Maxidletimes等 为了实现这一点,我找到了ConnectionPoolSettings。建设者和com。mo
当Datastax Java Cassandra驱动程序试图连接到您的集群时,如何让它超时? 我特别感兴趣的是当主机可以访问,但Cassandra端口被阻塞或Cassandr守护进程未运行时的情况。我正在编写一个命令行客户端,如果它不能在合理的时间内连接,它应该退出并报告适当的错误消息。目前,如果接触点可以到达,驾驶员似乎会永远等待接触点的响应。 也就是说,如果驱动程序在给定的最长时间内无法与任何
我无法成功地将MS Access连接到R。在堆栈溢出时读取其他线程时,我遵循了使用32位访问、将Rstudio更改为32位以及使用microsoft Access odbc驱动程序的建议。我不知道该怎么办... 我使用了以下说明: null 请帮忙,不胜感激。我无法单独从其他R中收集足够的信息来访问连接线程。
问题内容: 我目前正在为大学的一个班级做项目。我正在学习有关连接和操作数据库的信息,我们正在使用Microsoft .accdb文件。 这是我到目前为止所拥有的。 当寻找“ sun.jdbc.odbc.JdbcOdbcDriver”时,我得到以下输出。 似乎很容易解决。看来我想念司机或类似的东西。但是,我很难找到解决方法。JDK随附驱动程序吗?我需要单独下载吗?是否取决于我的操作系统?(Mac O