如何将Mongodb Atlas连接到Spring

如何将Mongodb Atlas连接到Spring,mongodb,spring-boot,mongodb-atlas,Mongodb,Spring Boot,Mongodb Atlas,我有一个web应用程序,它使用SpringBoot来处理后端逻辑。我正在尝试集成mongodb以跟踪有关此webapp用户的一些信息。 我在mongodb Atlas上创建了一个数据库,通过Mongo Shell连接正常。当我尝试连接Spring时,问题就出现了。让我告诉你所有的细节 在Atlas内部,我将这个IP地址(0.0.0.0/0(包括您当前的IP地址))添加到Security>Network Address中。理论上,这应该允许我从任何IP地址连接到数据库 然后我创建了一个名为“tes

我有一个web应用程序,它使用SpringBoot来处理后端逻辑。我正在尝试集成mongodb以跟踪有关此webapp用户的一些信息。 我在mongodb Atlas上创建了一个数据库,通过Mongo Shell连接正常。当我尝试连接Spring时,问题就出现了。让我告诉你所有的细节

在Atlas内部,我将这个IP地址(0.0.0.0/0(包括您当前的IP地址))添加到Security>Network Address中。理论上,这应该允许我从任何IP地址连接到数据库

然后我创建了一个名为“test”的集合

如果我点击我的集群,然后点击连接按钮,它会询问我要连接哪种设备。我选择“连接你的应用程序”,然后我必须选择驱动程序和版本。我分别选择“Java”和“3.6或更高版本”(我不确定它是否是正确的版本,备选版本是3.4或3.3)。最后它显示了连接字符串,它是:

mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
mongodb+srv://admin:@umedit obxpb.mongodb.net/test?retryWrites=true&w=多数
为了使用Spring连接Atlas,我使用了这个依赖项

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
</dependency>

org.springframework.data
spring数据mongodb
在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.data.mongodb.host=mongodb+srv://admin:@umedit obxpb.mongodb.net/test?retryWrites=true&w=多数
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
2020-02-25 16:31:25.605信息41162-[=多数:27017]org.mongodb.driver.cluster:连接到服务器mongodb时监视器线程中出现异常+srv://admin:@umedit obxpb.mongodb.net/test?retrywrites=true&w=多数:27017
mongodb.MongoSocketException:mongodb+srv://admin:@umedit obxpb.mongodb.net/test?retrywrites=true&w=maist:nodename或servname已提供,或未知
在com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188)~[mongo-java-driver-3.6.4.jar:na]
在com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59)~[mongo-java-driver-3.6.4.jar:na]
在com.mongodb.connection.SocketStream.open(SocketStream.java:57)~[mongo-java-driver-3.6.4.jar:na]
在com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126)~[mongo-java-driver-3.6.4.jar:na]
在com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114)~[mongo-java-driver-3.6.4.jar:na]
在java.lang.Thread.run(Thread.java:745)[na:1.8.0_111]
原因:java.net.UnknownHostException:mongodb+srv://admin:@umedit obxpb.mongodb.net/test?retrywrites=true&w=maist:nodename或servname已提供,或未知
在java.net.Inet6AddressImpl.lookupAllHostAddr(本机方法)~[na:1.8.0_111]
在java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)~[na:1.8.0\u 111]
在java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)~[na:1.8.0\u 111]
在java.net.InetAddress.getAllByName0(InetAddress.java:1276)~[na:1.8.0_111]
在java.net.InetAddress.getAllByName(InetAddress.java:1192)~[na:1.8.0_111]
在java.net.InetAddress.getAllByName(InetAddress.java:1126)~[na:1.8.0_111]
在java.net.InetAddress.getByName(InetAddress.java:1076)~[na:1.8.0_111]
在com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:186)~[mongo-java-driver-3.6.4.jar:na]
... 省略了5个公共框架
我不知道该怎么做才能使它起作用。我错过什么了吗

解决方案

正如@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.uri=mongodb+srv://admin:@umedit obxpb.mongodb.net/test?retryWrites=true&w=多数

即使没有spring.data.mongodb.port

那么,我认为连接到Mongo Atlas的应用程序.properties应该是spring.data.mongodb.uri,而不是spring.data.mongodb.host。
spring.data.mongodb.uri:mongodb://:@
我想这可能行得通
`

错误表明主机名未知。您是否在运行此spring应用程序的同一台计算机上运行mongo shell测试?表面上似乎是DNS问题…@barrypicker是的,我做了!不太确定-我找不到文档,但是请尝试
spring.data.mongodb.uri
,而不是
spring.data.mongodb.host
。。。我认为您还需要使用URI中的端口号…谢谢@barrypicker!它与spring.data.mongodb.uri一起工作!试图检查这是否是一个更复杂的问题,我甚至没有想到这一点!