【问题标题】:A Spring boot + mongo Heroku deployment fails due to error creating the mongoTemplate bean由于创建 mongoTemplate bean 错误,Spring boot + mongo Heroku 部署失败
【发布时间】:2021-05-04 15:09:33
【问题描述】:

我有一个 jhipster 生成的 Spring Boot + mongo 项目,该项目在本地部署成功,但使用 ObjectRocket 插件部署到 Heroku 失败并出现此错误:

[org.springframework.data.mongodb.core.MongoTemplate]: Factory method 'mongoTemplate' threw exception; 
nested exception is org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting for a server that matches 
com.mongodb.client.internal.MongoClientDelegate$1@4339e0de. Client view of cluster state is {type=REPLICA_SET, servers=[];
nested exception is com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches com.mongodb.client.internal.MongoClientDelegate$1@4339e0de.
Client view of cluster state is {type=REPLICA_SET, servers=[]

我相信我的配置变量和我的 MONGODB_URI 变量是正确的,因为在 shell 中,我已经成功地使用来自配置变量的相同连接字符串连接到我的 mongo 数据库。此连接字符串存储在MONGODB_URI 中,格式为mongodb://<USERNAME>:<PASSWORD@<host1>:<port1>,<host2>:<port2>,<host3>:<port3>/<DATABASE_NAME>?replicaSet=<replicaSetID>。这也意味着我已经在 ObjectRocket 端设置了我的 mongodb 数据库名、用户和密码。

我的 procfile 有 --spring.data.mongodb.database=$(echo "$MONGODB_URI" | sed "s/^.*:[0-9]*\///g") 引用 MONGODB_URI 的行。我的application-prod.yml 配置文件有以下条目:

spring:
  data:
    mongodb:
      uri: ${MONGODB_URI}?authMode=scram-sha1

由于与我的 mongo 数据库实例的连接失败,我没有成功部署。任何帮助将不胜感激。

此 pastebin 粘贴处的堆栈跟踪中包含更多上下文的错误:https://pastebin.com/wNd3TxUL

【问题讨论】:

    标签: mongodb spring-boot heroku production


    【解决方案1】:

    我找到了解决方案并想发布以防其他人遇到此问题并被说服进入配置文件和云基础架构的无用兔子洞。该问题特别是由于使用 Mongo Atlas DB 和使用 Mongobee 执行初始数据库配置步骤的 Spring Bean 引起的,例如设置数据库名称、模板和运行一些变更集以保持用户权限和少数初始用户。最重要的是,这个初始数据库配置试图修改 system.indexes,而 MongoDB Atlas deprecated starting in version 3.0。来自 MongoDB Atlas 文档:

    从 MongoDB 4.2 开始, .system.indexes 已被删除(自 3.0 以来已弃用对集合的访问)。要列出索引 [原文如此],请改用 listIndexes 命令。

    这使得这个问题与这些帖子中遇到的问题相同:

    MongoDB Atlas deprecates access to system.indexes Forbidden action on system.indexes,由同一作者回答,Yuriy Yunikov,他对上述问题的回答非常有帮助 Jhipster and mongobee discussion

    需要注意的是,JHipster 的最新版本(例如,至少早于 release 7 on)已经放弃了 Mongobee 以支持 Mongock

    【讨论】:

    • 是的,Mongock 应该可以很好地与 MongoDB atlas 配合使用。如果您发现任何问题,请不要犹豫,在 stackoverflow 上提出问题或在我们的 Mongock repository 中提出问题。你有文档here
    • 谢谢你,@Mongockteam。效果很好。
    猜你喜欢
    • 2012-10-16
    • 2021-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多