如何将Mongodb Atlas连接到Spring

Ste*_*una 7 mongodb spring-boot mongodb-atlas

我有一个使用 Spring Boot 来处理后端逻辑的 Web 应用程序。我正在尝试集成 mongodb 来跟踪有关此网络应用程序用户的一些信息。我在 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
Run Code Online (Sandbox Code Playgroud)

要使用 Spring 连接到 Atlas,我正在使用此依赖项

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

出于明显的原因,我没有输入密码。

唯一的问题是,当我启动 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
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做才能让它发挥作用。我错过了什么吗?

解决方案

正如 @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
Run Code Online (Sandbox Code Playgroud)

即使没有 spring.data.mongodb.port

小智 1

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