inv*_*bl3 8 java intellij-idea mongodb
尝试使用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);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,错误是:
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)
Run Code Online (Sandbox Code Playgroud)
当程序以使用 MongoDB 3.6 或更高版本的代码段开始时,没有+srv:
MongoClientURI uri = new MongoClientURI("mongodb://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
在 POM 文件中,我有依赖项:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.6.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
另外,当我开始时,mongo我的数据库被添加到这个地址mongodb://127.0.0.1:27017,但我不是为此添加了到集群的路径。也许我需要写具体集群的路径还是?
Ofc,我有管理员用户。此外,我可以通过 Compass 连接到我的集群和 shell。mongod过程开始。此错误仅在我在 IDE 中运行时出现。同样的问题可能在这里。
有谁知道如何解决这个错误?我很感激任何帮助。
解决了!所以,我所做的:
1)我只尝试通过driver3.6连接到层集群并写
mongodb+srv://user:<PASSWORD>@cluster0-ox90k.mongodb.net/test?retryWrites=true
Run Code Online (Sandbox Code Playgroud)
我总是收到一个错误:Connection strings must start with 'mongodb://'.
2)好的,我删除了片段+srv并以相同的方式编写
mongodb://user:<PASSWORD>@cluster0-ox90k.mongodb.net/test?retryWrites=true
Run Code Online (Sandbox Code Playgroud)
并再次得到错误:
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}}]
Run Code Online (Sandbox Code Playgroud)
所以,我写了通过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
Run Code Online (Sandbox Code Playgroud)
最后它解决了。
更新:如果你想使用驱动程序3.7+,你需要编写而不是格式化连接(并避免我上面的问题)
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
Run Code Online (Sandbox Code Playgroud)
使用另一种变体MongoClients.create() (如3.7版本的),并提到在这里:
MongoClient mongoClient = MongoClients.create("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
Run Code Online (Sandbox Code Playgroud)
注意:密码需要写不一样mongodb://user:<mypassword>@...,
只是格式 mongodb://user:mypassword@...
没有大括号<>。
| 归档时间: |
|
| 查看次数: |
7273 次 |
| 最近记录: |