You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch作业后更新记录抛出「无事务进行中」异常排查

Spring Batch监听器更新数据库时抛出TransactionRequiredException问题

环境与配置说明

  1. Job Repository配置:采用基于Map的实现,使用ResourcelessTransactionManager,配置类如下:
@Configuration
@EnableBatchProcessing
public class BatchConfigurer extends DefaultBatchConfigurer {

    @Override
    public void setDataSource(DataSource dataSource){


    }
}
  1. 多数据源与事务管理器配置:使用了与Spring Batch默认不同的PlatformTransactionManager,因此在配置中设置spring.main.allow-bean-definition-overriding=true,自定义事务管理器的配置如下:
@Configuration
@EnableJpaRepositories(
        basePackages = "repo's package",
        entityManagerFactoryRef = "entityManagerFactory",
        transactionManagerRef = "transactionManager"
)

public class DatasourceConfiguration {
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory ) { // 已定义数据源等相关配置
        return new JpaTransactionManager(entityManagerFactory);
    }
}

问题描述

通过实现JobExecutionListener,在afterJob方法中根据作业退出状态更新启动批处理的记录状态。本地环境运行正常,但部署到K8s远程服务器时抛出异常:

javax.persistence.TransactionRequiredException: no transaction is in progress

已尝试的方案

  • 给afterJob方法添加@Transactional(transactionManager = "myTransactionManager")注解,无效。
  • 设置hibernate.allow_update_outside_transaction=true可以解决问题,但担心这会影响Chunk出错时的回滚逻辑,且不清楚问题根源。

内容的提问来源于stack exchange,提问作者Kaepxer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:25:33