我有一个 Spring Boot 2 应用程序(仍处于开发阶段)与 JPA、hibernate 等一起运行良好。我现在进行的单一持久性测试通过正常。
但是,当我添加 @EnableBatchProcessing
到主引导类(用 @SpringBootApplication
注释的那个)我在 Maven 构建的测试阶段收到以下错误:
javax.persistence.TransactionRequiredException
: 没有交易进展
如果我只是删除此注释,测试将再次成功运行。
我在某处读到 spring Batch 使用的事务管理器与用于 JPA 持久性的事务管理器不同。
我该如何解决这个问题?
提前致谢。
最佳答案
这很简单。 @EnableBatchProcessing
注释使 Spring Batch 自动注册一个事务管理器以用于其事务,并且您的 JpaTransactionManager
永远不会被使用。
原因:
默认情况下,@EnableBatchProcessing
触发创建 DataSourceTransactionManager
.该事务管理器对导致您所看到的问题的 JPA/Hibernate 一无所知。
解决方案:
现在,如果要更改 Spring Batch 用于事务的事务管理器,则必须实现接口(interface) BatchConfigurer .有一个链接到 example用户在哪里执行此操作。他正在做的是将事务管理器切换到他自己的事务管理器。
关于spring - 添加@EnableBatchProcessing 会导致 TransactionRequiredException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583662/