Spring 引导 + mongo Heroku 部署因创建 mongo 模板 bean 时出错而失败

A Spring boot + mongo Heroku deployment fails due to error creating the mongoTemplate bean

我有一个 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@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@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

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

Starting in MongoDB 4.2, .system.indexes has been removed (access to the collection has been deprecated since 3.0). To list the inndexes [sic], use the listIndexes command instead.

这使得此问题与这些 post 中遇到的问题相同:

, answered by same author, Yuriy Yunikov,他回答了上面非常有帮助的细节 Jhipster and mongobee discussion

应该注意的是,JHipster 的最新版本(例如至少可以追溯到 release 7 on) have dropped Mongobee in favor of Mongock