我试图用@Autowired注释将一个存储库注入changelog,但是它没有被注入。
配置使用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
}
}发布于 2020-03-02 21:34:02
首先,请注意,如果在您的changelogs中使用存储库,那么将其用于写操作是一种错误的做法,因为它不会被锁机制覆盖(这是即将到来的特性),只用于读取。
要注入存储库(或任何其他依赖项),只需将其注入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),并且不再支持DB类。请使用MongoDatabase或MongoTemplate(首选)。
发布于 2020-06-03 07:19:17
我们最近发布了4.0.7.alpha版本,除其他外,它允许您在changeSets中使用Spring存储库(以及您希望使用的任何自定义bean ),而不存在任何问题。您可以插入、更新、删除和读取。锁会安全地盖住它。
唯一的限制是它需要是一个接口,这应该是Spring存储库的常见情况。
请看一下这个示例
https://stackoverflow.com/questions/60149903
复制相似问题