【发布时间】:2021-01-30 00:55:36
【问题描述】:
我的应用程序是在 Spring Boot 中编写的,并且可以在自我管理的 MongoDB 服务器上正常工作。现在我正在尝试将我的同一个 Spring Boot 应用程序与 AWS DocumentDB 连接起来。我启动了一个 documentDB 集群并使用以下配置与 spring-boot 连接。
spring.data.mongodb.uri=mongodb://<user>:<password>@<my-cluster-endpoint>:27017/?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false
spring.data.mongodb.database=mydb
我已禁用 TLS,它在集群详细信息中显示 TLS Enabled: No。我正在将我的 Spring Boot 应用程序部署在一个 EC2 实例中,该实例运行在与 documentdb 相同的 vpc 中,我已经对其进行了交叉检查。
运行我的应用程序时出现以下错误。
com.mongodb.client.internal.MongoClientDelegate$1@51a81d99 从集群描述 ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=:27017, type=UNKNOWN, state=CONNECTING,异常={com.mongodb.MongoSocketReadTimeoutException:接收消息超时},由{java.net.SocketTimeoutException:读取超时}}]}引起。在超时前等待 30000 毫秒
我没有找到在 spring-boot 中使用 documentdb 的好资源。知道如何找到确切原因吗?
【问题讨论】:
-
这似乎不是 spring-boot 本身的问题。您是否使用正确的安全组设置? DocumentDB 确实需要在 DB 端口上启用入站连接。请参阅“为集群的安全组启用入站连接”。在docs.aws.amazon.com/documentdb/latest/developerguide/…。排除这种情况的一种方法是运行“telnet
27017”之类的命令,看看是否连接成功。 -
是的,我使用了正确的安全组,并且能够从同一个 EC2 实例连接到 mongo shell。
-
你找到解决这个问题的方法了吗?可以在这里分享?
标签: mongodb amazon-web-services spring-boot aws-documentdb