【问题标题】:@Rollback(true) not working in spring boot 1.3.X@Rollback(true) 在 Spring Boot 1.3.X 中不起作用
【发布时间】:2016-05-01 20:44:20
【问题描述】:

我已将 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 boot 版本。我也看不到在日志中创建的事务是假设的

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

谢谢

【问题讨论】:

  • 发布了代码.. 很奇怪,我在 spring 的迁移/发布文档上找不到任何东西
  • 我刚刚验证了 Spring TestContext Framework 从不支持 @Primary 用于事务管理器。因此,您是否绝对肯定您只是将 Spring Boot 的版本从 1.2.5 更改为 1.3.2?
  • 如果在 Spring Boot 1.2.5 1.3.2 的测试方法中添加assertTrue("in transaction?", TransactionSynchronizationManager.isActualTransactionActive()); 会发生什么?
  • 我是日志。我可以稍后尝试或将其作为附件发送到 Jira。日志处于调试级别

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


【解决方案1】:

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();
}

【讨论】:

  • 你是对的,感谢您的回答,但我不想更改代码。检查 spring 代码和日志后,我发现如果我将主 bean 称为“transactionManager”,它可以正常工作。你可以在下面看到我的答案
  • 仅供参考:Spring 的测试支持中的行为没有变化。有关详细信息,请参阅SPR-13891 中的讨论。
【解决方案2】:

我已经调试了 spring.. 测试框架中存在问题/错误,或者我不正确理解使用。 我检查了spring的代码,看到了这个:

bf.getBean(DEFAULT_TRANSACTION_MANAGER_NAME, PlatformTransactionManager.class);

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

解决方案只是用该名称标记 bean。尝试向 spring-test 项目打开问题,但不知道在哪里。如果有人知道如何请建议。

谢谢

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2022-01-06
  • 2018-09-24
  • 2020-10-31
  • 2019-11-25
相关资源
最近更新 更多