mongodb - 如何将 Mongodb Atlas 连接到 Spring

标签 mongodb spring-boot mongodb-atlas

我有一个 Web 应用程序,它使用 Spring Boot 来处理后端逻辑。我正在尝试集成 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.uri 而不是使用 spring.data.mongodb.host。现在它完美地工作。
spring.data.mongodb.uri=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority

即使没有 spring.data.mongodb.port

最佳答案

好吧,我认为您要连接到 Mongo Atlas,您的 application.properties 应该有 spring.data.mongodb.uri 而不是 spring.data.mongodb.host。 spring.data.mongodb.uri: mongodb://<user>:<passwd>@<host>:<port>/<dbname>我认为这可能有效
`

关于mongodb - 如何将 Mongodb Atlas 连接到 Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60398285/

相关文章:

node.js - 类型错误 : Cannot read property 'find' of undefined on mongoose

node.js - Mongoose 和其他集合一起填充空集合

node.js - 如何使用更新插入行为正确更新文档? (Mongo 漏洞 SERVER-10711)

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'crudRepository'

junit - 在 Junit 中跳过/模拟 Redis

java - Spring Boot JOOQ 集成 - 编译问题

mongodb - Vercel 为每个请求创建新的数据库连接

Mongoose :更新json数组中的元素

mongodb - 如何使用 Mongodb 中另一个表的 _id 更新一个表

linux - 如何在 Ubuntu 上使用 Mongodb 27017 端口