【发布时间】:2017-08-01 02:16:29
【问题描述】:
我有以下问题:
1. 我已经设置了使用 MongoDB 数据库的 spring boot 应用程序。
2. 我在本地进行了测试,它可以正常工作 - 应用程序正确连接到数据库。
3. 我将spring boot app部署到azure,但是app无法连接MongoDB数据库。我得到以下异常:
“在等待与 ReadPreferenceServerSelector{readPreference=primary} 匹配的服务器时超时 30000 毫秒。集群状态的客户端视图是 {type=UNKNOWN, servers= [{address=appexpirer.documents.azure.com:10250, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadTimeoutException: Timeout while received message},由{java.net.SocketTimeoutException: Read timed out}}引起;嵌套异常为com.mongodb.MongoTimeoutException: 等待与 ReadPreferenceServerSelector{readPreference=primary} 匹配的服务器时,在 30000 毫秒后超时。集群状态的客户端视图是 {type=UNKNOWN, servers= [{address=appexpirer.documents.azure.com:10250, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadTimeoutException: Timeout while received message},由 {java.net.SocketTimeoutException: 读取超时}}]"
我相信我的 application.properties 配置正确:
spring.data.mongodb.uri=mongodb://username:password@host:port/databaseName?ssl=true&sslInvalidHostNameAllowed=true
server.ssl.enabled=true
server.ssl.enabled-protocols=true
但我不确定 - 你能告诉我哪里出了问题吗?
如果我使用 Robomongo 工具进行连接,则一切正常。 我使用 Java 8 - 会不会有问题?
【问题讨论】:
-
启动应用程序是如何部署到 azure 的?是否有任何可能阻止对 DocumentDb 端点的出站访问?
-
我通过 git 部署了 app.jar 文件和 web.config 文件。我想知道 ssl 是否有问题,因为我没有在 Azure 上的应用服务上配置 ssl,而 MongoDB 需要 SSL 连接 - 你遇到过这种情况吗?
-
我可以点击 mongo 端点,您的错误会从我的机器启动时显示。它显示身份验证错误(显然),因此连接问题似乎不是到 mongo 端点,而是来自您的启动应用程序所在的位置。
-
我相信 azure app 服务需要 ssl 证书才能与 mongodb 通信,因为唯一的方法是使用 ssl 连接到 mongodb - 我会尝试进一步调查。
-
终于解决了。这个问题真的很愚蠢。当我通过 git app 上传 app.jar 文件时,实际上 Azure 上并没有更新。我注意到有异常表明应用程序无法更新,因为以前的版本正在运行......我不得不手动停止进程,上传新版本,然后手动运行上传的版本。无论如何,谢谢大家的帮助。
标签: mongodb azure spring-boot java-8