0

我正在使用 Mongock 使用 Spring-Boot 迁移和初始化我的 MongoDB 数据库。我需要的是一种检查何时应用所有变更日志的方法。

如何检查 Mongock 是否完成了所有的变更日志/变更集?

我发现 Mongock 创建了一个集合mongockLock,其中在迁移运行时有一个条目。

检查上述集合中是否缺少任何文档就足以得出 Mongock 已完成更改日志的结论吗?

如何查询此集合中的文档?

4

2 回答 2

1

使用 Spring Boot,有两种使用 Mongock 的方法,如Mongock 的文档所示:

  1. 通过属性,使用@EnableMongock

    mongock:
      runner-type: InitializingBean
    
    
    
  2. 使用构建器方法

    @Bean
    public MongockInitializingBeanRunner mongockInitializingBeanRunner(
                                           ApplicationContext springContext,
                                           MongoTemplate mongoTemplate){
    return MongockSpring5.builder()
        .setDriver(SpringDataMongo3Driver.withDefaultLock(mongoTemplate))
        .addChangeLogsScanPackage("your_changeLog_package_path")
        .setSpringContext(springContext)
        .buildInitializingBeanRunner();
    

}

  • 如果 runner-type 是 InitializingBean,则调度作业不应发生在 Mongock 之前。但是,如果它是 ApplicationRunner,它可能会发生
于 2021-06-18T20:21:29.270 回答
1

首先,mongockLock集合只是分布式悲观锁的集合。这是 Mongock 用来确保 changeLog 一次仅由一个实例运行的机制。如果成功,只需一次(除非标志 runAlways 为真,在这种情况下显然每次都会运行)。 所以 mongockLock 不是你要找的

有 3 种方法可以检查迁移是否成功运行。

  1. 没做什么。如果您不更改failFast任何 ChangeSet 中的默认值,如果任何 changeLogs 失败,Mongock runner将抛出异常
  2. 订阅 Mongock 事件。您可以查看此示例项目
  3. 检查集合mongockChangeLog
于 2021-06-18T16:25:33.413 回答