添加 @EnableBatchProcessing 会导致 TransactionRequiredException 错误

use*_*736 5 spring jpa

我有一个 Spring Boot 2 应用程序(仍处于开发阶段),可以与 JPA、hibernate 等一起运行良好。我现在进行的单一持久性测试进展顺利。

但是,当我添加@EnableBatchProcessing到主引导类(用 注释的类@SpringBootApplication)时,我在 Maven 构建的测试阶段收到以下错误:

  • javax.persistence.TransactionRequiredException: 没有交易正在进行中

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

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

我该如何解决这个问题?

提前致谢。

Tah*_*Mir 3

这很简单。@EnableBatchProcessing注释会导致 Spring Batch 自动注册事务管理器以用于其事务,并且您JpaTransactionManager永远不会被使用。

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

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