我有以下虚拟课程:
@Document("items")
static class Item {
int i;
public Item() {
}
public Item(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
这是一个简单的
@Changeset
://@Autowired
@ChangeSet(order = "001", id = "add_items", author = "tester")
public void changeset1(MongoTemplate mongoTemplate) {
for (int i = 0; i < NUM_OF_DB_ITEMS; i++) {
mongoTemplate.insert(new Item(i));
}
}
调用
@Changeset
之后,单元测试正在运行(注意mongoTemplate是@Autowired
)@Test
public void test() {
List<Item> items = mongoTemplate.findAll(Item.class);
System.out.println(items);
}
问题:我从
findAll()
获得零项我发现将
@Autowired
添加到changeset1()
时确实起作用(上面已注释)-我得到了所有物品。你能解释为什么吗?在examples中,我看不到他们需要
@Autowired
我应该这样做吗?我的意思是,它会破坏Mongock的锁定机制吗?
最佳答案
没有完整的代码,很难找出问题出在哪里。最有可能的Spring配置未正确配置,因此,如果没有自动装配注释,则无法在Spring容器中正确实例化mongoTemplate。如果您想更深入地了解MongoTemplate源代码并比较注释更改之前和之后的执行路径,则将找出原因。
我建议按照他们的示例来找出您的项目中缺少的任何内容。 https://github.com/cloudyrock/mongock-samples/tree/master/samples-mongock-spring/sample-mongock-spring-v2