@Rollback(true) 在 spring 启动 1.3.X 中不工作

@Rollback(true) not working in spring boot 1.3.X

我已经将我的 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();
    }

配置:

@Bean
@Primary
public PlatformTransactionManager txManager() {
    return new DataSourceTransactionManager(dataSource());
}

它在相同的配置和代码中完美运行,唯一的变化是 spring 引导版本。我也看不到正在日志中创建交易

有人知道吗?也许是一种调试和理解问题所在的方法?

谢谢

我已将 spring 调试.. 测试框架中有一个 problem/bug 或我没有正确理解使用。 我检查了 spring 的代码,看到了这个:

bf.getBean(DEFAULT_TRANSACTION_MANAGER_NAME, PlatformTransactionManager.class);

当我们有多个事务管理器时会发生这种情况,而不是获取由 @Primary 注释标记的 bean spring 尝试获取调用 "transactionManager".

的事务管理器

解决方案就是用那个名字标记 bean。试图向 spring-test 项目打开问题,但不知道在哪里。如果有人知道如何请指教。

谢谢

编辑:所以解决方案是我上面写的或者只是将它们命名为 transaction(@Transactional("myManager")) 并在测试方法签名中使用它

TransactionTestExecutionListener 在 Spring Framework 4.1(由 Spring Boot 1.2 使用)和 Spring Framework 4.2(由 Spring 使用)之间发生了很大变化启动 1.3)。听起来行为发生了变化,我怀疑这可能不是故意的。

要在不重命名其中一个 bean 的情况下解决您的问题,您需要告诉测试框架要使用哪个事务管理器。最简单的方法是通过 @Transactional 注释:

@Transactional("txManager")
@Rollback(true)
@Test
public void testRollBack() {
     dao.saveToDb();
     throw new RunTimeException();
}