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