spring - 添加@EnableBatchProcessing 会导致 TransactionRequiredException 错误

标签 spring jpa

我有一个 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/

    相关文章:

    java - Spring security 在并发环境中得到错误的主体

    java - Spring MVC 中未调用 Servlet 映射 URL

    java - 有人可以解释 JPA 和 Hibernate 中的 mappedBy 吗?

    java - 如何在 Hibernate/JPA 中的两个表之间创建中间表?

    java - 42Y36 : SELECT list may only contain grouping columns, 分组 'table.*'不允许

    java - 如何避免响应错误: 429 Too Many Requests

    java - Spring-Roo 删除 Mysql,尽管 hibernate.hbm2ddl.auto

    java - Spring Data Rest - 软删除

    spring - EntityManager persist() 方法不向数据库插入记录

    java - 使用 Java 断言是否适合验证 JPA 实现