问题描述
在更新这个庞大的集合时,以下迁移代码似乎卡住了。
@ChangeSet(order = "010",id = "add_tenant_to_product",author = "pn")
fun addTenantToProduct(mongoTemplate: MongoTemplate) {
log.info("Adding tenants to products")
val query = Query()
val update = Update()
update.set("tenants",arrayOf("shared"))
mongoTemplate.updateMulti(query,update,Product::class.java)
}
@ChangeSet(order = "011",id = "add_tenant_to_product_version",author = "pn")
fun addTenantToProductVersion(mongoTemplate: MongoTemplate) {
log.info("Adding tenants to product-version")
val query = Query()
val update = Update()
...
应用程序日志的最后几行表示变更集被调用,但后续的没有被调用。
2021-05-11 08:00:29.385 INFO [产品服务,] 1 --- [
main] c.a.a.mongock.changelog.Migration :将租户添加到
产品
2021-05-11 08:00:29.576 INFO [产品服务,] 1 --- [
main] org.mongodb.driver.connection : 打开连接
Spring 执行器健康探测因此失败,容器不断重启。有没有更好的 API 可以更快地使用?
注意:
- 使用的版本:'com.github.cloudyrock:mongock:1.12'
- 下面是配置
@Profile("!tenant")
@Configuration
class MongockConfig : AbstractMongoConfiguration() {
@Value("\${spring.data.mongodb.uri}")
private lateinit var uri: String
@Value("\${spring.data.mongodb.database}")
private lateinit var database: String
override fun mongoClient(): MongoClient {
return MongoClient(MongoClientURI(uri))
}
override fun getDatabaseName(): String {
return database
}
@Bean
fun mongock(): Mongock {
return MongockBuilder(mongoClient(),databaseName,"com.somepackage.mongock.changelog")
.setMongoTemplate(mongoTemplate())
.setLockQuickConfig()
.build()
}
}
这是日志
2021-05-10 10:59:33.406 INFO [product-service,] 1 --- [ main] org.mongodb.driver.connection : 打开连接 [connectionId{localValue:16,serverValue:26359638} ] 到 dummy-clusterr-39649.servers.mongodirector.com:27017 2021-05-10 10:59:33.525 INFO [product-service,] 1 --- [main] c.github.cloudyrock.mongock.LockChecker:Mongbee 试图获取锁 2021-05-10 10:59:33.574 INFO [product-service,] 1 --- [main] c.github.cloudyrock.mongock.LockChecker:锁被其他进程占用,直到:5 月 10 日星期一 11:01 :03 格林威治标准时间 2021 2021-05-10 10:59:33.574 INFO [product-service,] 1 --- [main] c.github.cloudyrock.mongock.LockChecker :Mongock 将进入睡眠等待锁定:90265 毫秒( 1 分钟) 2021-05-10 11:01:03.839 INFO [product-service,] 1 --- [main] c.github.cloudyrock.mongock.LockChecker:Mongbee 试图获取锁 2021-05-10 11:01:03.844 INFO [product-service,] 1 --- [main] c.github.cloudyrock.mongock.LockChecker:Mongbee 获得锁,直到:5 月 10 日星期一 11:04:03格林威治标准时间 2021 2021-05-10 11:01:03.844 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : Mongock 开始数据迁移序列.. 2021-05-10 11:01:03.982 INFO [product-service,] 1 --- [main] org.reflections.Reflections : Reflections 用了 60 毫秒来扫描 1 个 url,产生 2 个键和 3 个值 2021-05-10 11:01:04.038 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@7abd0e71 2021-05-10 11:01:04.046 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@6635f36 pass over 2021-05-10 11:01:04.047 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@61352a80 2021-05-10 11:01:04.052 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@7576ed14 2021-05-10 11:01:04.054 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@b0302179 pass over 2021-05-10 11:01:04.068 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@e6caade0 2021-05-10 11:01:04.071 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@2688129a 2021-05-10 11:01:04.073 INFO [product-service,] 1 --- [main] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@e46af677 2021-05-10 11:01:04.075 INFO [产品服务,] 1 --- [主要] com.github.cloudyrock.mongock.Mongock : com.github.cloudyrock.mongock.ChangeEntry@d788b92f 2021-05-10 11:01:04.077 INFO [product-service,] 1 --- [ main] c.a.a.mongock.changelog.Migration :向问题添加组织 2021-05-10 11:01:04.158 INFO [product-service,] 1 --- [main] org.mongodb.driver.connection:打开连接 [connectionId{localValue:17,serverValue:26359725}] 到虚拟-clusterr-39649.servers.mongodirector.com:27017
解决方法
您能否提供更多信息,例如您使用的 mongock 版本、日志跟踪(您显示的内容不足以进行诊断)、mongock 配置等?
另一方面,您应该直接使用 MongockTempalte
而不是 MongoTemplate
。这是相同的 API,你不会错过任何东西。实际上直接使用 MongoTemplate 应该会抛出异常。
有关详细信息,请查看Mongock's documenation