我可以将 mongock 与 Spring 数据存储库一起使用吗?

Can I use mongock with Spring Data Repositories?

我试图用 @Autowired 注释将存储库注入更新日志 而且它不会被注入。

配置使用 spring 应用程序上下文

@Bean
public SpringBootMongock mongock(ApplicationContext springContext, MongoClient mongoClient) {
  return new SpringBootMongockBuilder(mongoClient, "yourDbName", "com.package.to.be.scanned.for.changesets")
      .setApplicationContext(springContext) 
      .setLockQuickConfig()
      .build();
}

和更新日志

@ChangeLog(order = "001")
public class MyMigration {

    @Autowired
    private MyRepository repo;

    @ChangeSet(order = "001", id = "someChangeId", author = "testAuthor")
    public void importantWorkToDo(DB db){
       repo.findAll() // here null pointer
    }
}

首先,请注意,如果您在变更日志中使用存储库,则将其用于写入是一种不好的做法,因为它不会被锁定机制覆盖(此功能即将推出),仅适用于阅读。

要注入您的存储库(或任何其他依赖项),您只需将其注入到您的 changeSet 方法签名中,如下所示:

@ChangeLog(order = "001")
public class MyMigration {


    @ChangeSet(order = "001", id = "someChangeId", author = "testAuthor")
    public void importantWorkToDo(MongoTemplate template, MyRepository repo){
       repo.findAll(); this should work
    }
}

请注意,您应该使用最新版本(目前为 3.2.4)并且不再支持数据库 class。请使用 MongoDatabase 或 MongoTemplate(首选)。

Documentation to Mongock

我们最近发布了 4.0.7.alpha 版,除其他外,它允许您在变更集中毫无问题地使用 Spring 存储库(以及您希望的任何其他自定义 bean)。您可以插入、更新、删除和读取。它将被锁安全地覆盖。

唯一的限制是它需要是一个接口,这应该是 Spring 存储库的常见情况。

请看这个example