我已将我的pom从spring-boot-starter-parent 1.2.5.RELEASE更新为1.3.2.RELEASE。
问题是一切都保持不变,但所有测试@Rollback(true)
在迁移后根本不起作用。
@Transactional
@Rollback(true)
@Test
public void testRollBack() {
dao.saveToDb();
throw new RunTimeException();
}
Configaturation:
@Bean
@Primary
public PlatformTransactionManager txManager() {
return new DataSourceTransactionManager(dataSource());
}
它在相同的配置和代码中完美运行,唯一的变化是spring boot版本。我无法看到正在创建日志中的事务也是如此
任何人都有线索?也许是一种调试和理解问题的方法?
由于
答案 0 :(得分:3)
TransactionTestExecutionListener
在Spring Framework 4.1(由Spring Boot 1.2使用)和Spring Framework 4.2(由Spring Boot 1.3使用)之间发生了很大的变化。听起来行为发生了变化,我怀疑这可能不是故意的。
要在不重命名其中一个bean的情况下解决问题,您需要告诉测试框架使用哪个事务管理器。最简单的方法是通过@Transactional
注释:
@Transactional("txManager")
@Rollback(true)
@Test
public void testRollBack() {
dao.saveToDb();
throw new RunTimeException();
}
答案 1 :(得分:0)
我把弹簧放在调试上.. 测试框架中存在问题/错误,或者我不理解正确使用。 我检查了春天的代码并看到了这个:
bf.getBean(DEFAULT_TRANSACTION_MANAGER_NAME, PlatformTransactionManager.class);
当我们有多个事务管理器时,会发生这种情况,而不是通过@Primary
注释弹出标记的bean尝试获取调用“transactionManager”的事务管理器。
解决方案就是用这个名称标记bean。试图向spring-test项目开放问题但是不知道在哪里..如果有人知道怎么请建议。
由于
编辑:所以解决方案是我上面写的或者只是将它们命名为事务(@Transactional("myManager")
)并在测试方法签名中使用它