我可以将 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(首选)。
我们最近发布了 4.0.7.alpha 版,除其他外,它允许您在变更集中毫无问题地使用 Spring 存储库(以及您希望的任何其他自定义 bean)。您可以插入、更新、删除和读取。它将被锁安全地覆盖。
唯一的限制是它需要是一个接口,这应该是 Spring 存储库的常见情况。
请看这个example
我试图用 @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(首选)。
我们最近发布了 4.0.7.alpha 版,除其他外,它允许您在变更集中毫无问题地使用 Spring 存储库(以及您希望的任何其他自定义 bean)。您可以插入、更新、删除和读取。它将被锁安全地覆盖。
唯一的限制是它需要是一个接口,这应该是 Spring 存储库的常见情况。
请看这个example