我有一个 Spring Boot 2 应用程序(仍处于开发阶段),可以与 JPA、hibernate 等一起运行良好。我现在进行的单一持久性测试进展顺利。
但是,当我添加@EnableBatchProcessing到主引导类(用 注释的类@SpringBootApplication)时,我在 Maven 构建的测试阶段收到以下错误:
javax.persistence.TransactionRequiredException: 没有交易正在进行中如果我只是删除此注释,测试将再次成功运行。
我在某处读到 Spring Batch 使用的事务管理器与用于 JPA 持久性的事务管理器不同。
我该如何解决这个问题?
提前致谢。
这很简单。@EnableBatchProcessing注释会导致 Spring Batch 自动注册事务管理器以用于其事务,并且您JpaTransactionManager永远不会被使用。
原因:
默认情况下,@EnableBatchProcessing会触发DataSourceTransactionManager. 该事务管理器对 JPA/Hibernate 一无所知,这会导致您所看到的问题。
解决方案:
现在,如果您想更改 Spring Batch 用于事务的事务管理器,则必须实现接口BatchConfigurer。有一个示例链接,其中用户已完成此操作。他正在做的是将事务管理器切换到他自己的事务管理器。
| 归档时间: |
|
| 查看次数: |
1711 次 |
| 最近记录: |