添加@EnableBatchProcessing会导致TransactionRequiredException错误

时间:2018-03-31 02:34:04

标签: spring jpa

我有一个Spring Boot 2应用程序(仍在开发阶段)与JPA,hibernate等运行良好。我现在得到的单一持久性测试很顺利。

但是,当我将@EnableBatchProcessing添加到主引导类(使用@SpringBootApplication注释的那个)时,我在maven构建的测试阶段出现以下错误:

  • javax.persistence.TransactionRequiredException:没有交易 进度

如果我只删除此注释,则测试会再次成功运行。

我在某处读到,Spring Batch使用的事务管理器与JPA持久性使用的事务管理器不同。

如何解决此问题?

提前致谢。

1 个答案:

答案 0 :(得分:2)

这很简单。eval注释使Spring Batch自动注册一个事务管理器用于其事务,而"<Queue2 contents: ['a', 'b', 'c']>"永远不会被使用。

原因:
默认情况下,@EnableBatchProcessing会触发JpaTransactionManager的创建。这个事务管理器对JPA / Hibernate一无所知,导致你看到的问题。

解决方案:
现在,如果要更改Spring Batch用于事务的事务管理器,则必须实现接口BatchConfigurer。有example链接,用户已完成此操作。他正在做的是将事务管理器切换到他自己的事务管理器。