我正在使用spring-boot(1.1.8.RELEASE),spring-data-neo4j(3.2.0.RELEASE)构建一个应用程序,以便通过rest api连接到独立的neo4j服务器。我正在使用spring-test来测试应用程序我已经实现了一个单元测试来创建一个Node并检索它。 运行良好但测试完成后新节点仍保留在数据库中,但我希望事务能够回滚并删除节点
但是在控制台中我可以看到以下声明。
"Rolled back transaction after test execution for test context...
**我不明白为什么基于控制台回滚似乎已经发生但事务已经提交到数据库。 **
如果有人能帮助我找出问题的来源,我们将非常感激。
在下方查找我的弹簧配置
@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
public class AppConfig extends Neo4jConfiguration {
public AppConfig() {
setBasePackage("demo");
}
@Bean
public GraphDatabaseService graphDatabaseService(Environment environment) {
return new SpringRestGraphDatabase("http://localhost:7474/db/data");
}
}
在我的测试类下面找到
@SuppressWarnings("deprecation")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = AppConfig.class)
@Transactional
public class AppTests {
@Autowired
private Neo4jTemplate template;
@Test
public void templateTest() {
Person person = new Person();
person.setName("Benoit");
person.setBorn(1986);
Person newPerson = template.save(person);
Person retrievedPerson = template.findOne(newPerson.getNodeId(),Person.class);
Assert.assertEquals("Benoit", retrievedPerson.getName());
}
}
我尝试在单元测试类中添加以下注释,但它没有改变任何内容:
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
我还尝试根据我在其他帖子中看到的内容在单元测试中添加以下内容
implements ApplicationContextAware
感谢您的帮助
此致
答案 0 :(得分:0)
您正在经历的行为是:在这方面, Spring TestContext Framework (TCF)中的事务支持没有任何问题。
TCF通过配置的transactionManager
管理交易。
因此,当您切换到嵌入式数据库并使用该嵌入式数据库的数据源配置事务管理器时,这非常有效。问题是Neo4J-REST中的事务支持与Spring的事务管理工具无关。正如Michael Hunger在您引用的另一个帖子中所述,即将推出的Neo4J-REST API版本应解决此问题。
请注意,使用@TransactionConfiguration
注释测试类的效果为零,因为您只是使用默认值覆盖默认值,而默认值不会实现任何效果。此外,在测试类中实现ApplicationContextAware
对事务管理没有影响。
此致
Sam (spring-test
组件负责人)