我有一个使用Spring Boot来处理后端逻辑的Web应用程序。我正在尝试集成mongodb来跟踪有关此Web应用程序用户的一些信息。 我在mongodb Atlas上创建了一个数据库,并通过Mongo Shell建立了良好的连接。当我尝试与Spring连接时,问题就来了。让我向您展示所有细节
在Atlas内部,我将此IP地址(0.0.0.0/0(包括您当前的IP地址))添加到“安全性”>“网络地址”中。从理论上讲,这应该允许我从任何IP地址连接到数据库。
然后我创建了一个名为“ test”的集合。
如果我单击集群,然后单击连接按钮,它将询问我要连接哪种模式。我选择“连接您的应用程序”,然后必须选择驱动程序和版本。我分别选择“ Java”和“ 3.6或更高版本”(我不确定它是否是正确的版本,替代版本是3.4或3.3)。最后,它向我显示了连接字符串:
mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
要使用Spring连接到Atlas,我正在使用此依赖项
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
在application.properties文件中,这两行用于配置mongo。
spring.data.mongodb.host=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
spring.data.mongodb.port=27017
出于明显的原因,我没有输入密码。
唯一的问题是,当我启动Spring Boot时,我继续收到此错误消息:
2020-02-25 16:31:25.605 INFO 41162 --- [=majority:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority:27017
com.mongodb.MongoSocketException: mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority: nodename nor servname provided, or not known
at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.SocketStream.open(SocketStream.java:57) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongo-java-driver-3.6.4.jar:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongo-java-driver-3.6.4.jar:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.net.UnknownHostException: mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority: nodename nor servname provided, or not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_111]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_111]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_111]
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_111]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_111]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_111]
at java.net.InetAddress.getByName(InetAddress.java:1076) ~[na:1.8.0_111]
at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:186) ~[mongo-java-driver-3.6.4.jar:na]
... 5 common frames omitted
我不知道该怎么做才能使其正常工作。我想念什么吗?
解决方案
如@barrypicker所建议,问题出在属性文件中。我不是使用spring.data.mongodb.host而是使用spring.data.mongodb.uri。现在可以正常使用了。
spring.data.mongodb.uri=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
即使没有spring.data.mongodb.port
答案 0 :(得分:0)
好吧,我认为您要连接到 Mongo Atlas,您的 application.properties 应该有 spring.data.mongodb.uri 而不是 spring.data.mongodb.host。spring.data.mongodb.uri: mongodb://<user>:<passwd>@<host>:<port>/<dbname>
我认为这可能有效
`