@Rollback(true)无法在spring boot 1.3.X中工作

时间:2016-01-25 13:54:34

标签: spring spring-boot spring-transactions spring-test

我已将我的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版本。我无法看到正在创建日志中的事务也是如此

任何人都有线索?也许是一种调试和理解问题的方法?

由于

2 个答案:

答案 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"))并在测试方法签名中使用它