问题描述
我正在使用 Mongock 通过 Spring-Boot 迁移和初始化我的 MongoDB 数据库。 我需要的是一种检查何时应用所有变更日志的方法。
如何检查 Mongock 是否已完成所有变更日志/变更集?
我发现 Mongock 创建了一个集合 mongockLock,其中在迁移运行时有一个条目。
是否足以检查上述集合中没有任何文档来得出 Mongock 已完成变更日志的结论?
如何查询此集合中的文档?
解决方法
首先,mongockLock
集合只是分布式悲观锁的集合。这是 Mongock 用来确保 changeLog 一次仅由一个实例运行的机制。如果成功,只需一次(除非标志 runAlways 为真,在这种情况下显然每次都会运行)。
所以 mongockLock 不是您要找的
有 3 种方法可以检查迁移是否成功运行。
- 什么都不做。如果您不更改任何 ChangeSet 中
failFast
的默认值,则 Mongock runner 将在任何更改日志失败时抛出异常 - 订阅 Mongock 活动。您可以查看this example project
- 检查集合 mongockChangeLog
Spring Boot 有两种使用 Mongock 的方法,如 Mongock's documentation 所示:
-
通过属性,使用
@EnableMongock
mongock: runner-type: InitializingBean
-
使用构建器方法
@Bean public MongockInitializingBeanRunner mongockInitializingBeanRunner( ApplicationContext springContext,MongoTemplate mongoTemplate){ return MongockSpring5.builder() .setDriver(SpringDataMongo3Driver.withDefaultLock(mongoTemplate)) .addChangeLogsScanPackage("your_changeLog_package_path") .setSpringContext(springContext) .buildInitializingBeanRunner();
}
- 调度作业不应在 Mongock 之前发生,如果 runner-type 是 InitializingBean。但是如果它是 ApplicationRunner 可能会发生