【问题标题】:How to connect Mongodb Atlas to Spring如何将 Mongodb Atlas 连接到 Spring
【发布时间】:2021-10-26 16:43:17
【问题描述】:

我有一个使用 Spring Boot 处理后端逻辑的 Web 应用程序。我正在尝试集成 mongodb 以跟踪有关此 webapp 用户的一些信息。 我在 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

【问题讨论】:

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

标签: mongodb spring-boot mongodb-atlas


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在“pom.xml”文件中使用这个依赖

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

    在“application.properties”里面

    使用“spring.data.mongodb.uri”

    spring.data.mongodb.uri = mongodb+srv://<user>:<password>@<cluster_name>.mogodb.net/<dbname>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2021-06-25
      • 2019-03-14
      相关资源
      最近更新 更多