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

Spring Batch作业第二步无法查询到第一步插入数据库的数据问题咨询

问题原因

你遇到的是Spring Batch 事务管理的典型问题,本质是第一步写入数据的事务,在第二步执行时尚未提交,因此第二步查询不到未提交的数据,任务执行完成后所有事务最终提交,所以后续可以正常查询到数据。

解决方案

按优先级排查处理:

  • 优先检查事务管理器配置
    确保Spring Batch使用的事务管理器,和业务DAO、Service层绑定的是同一个DataSource对应的事务管理器。如果Spring Batch误配置了独立的事务管理器(比如测试场景下用的ResourcelessTransactionManager),会导致业务写入的事务和Spring Batch的Step生命周期解绑,Step结束时不会触发业务事务提交,直到整个Job完成才会提交。
    正确配置参考(Spring Boot场景):
    @Configuration
    @EnableBatchProcessing
    public class BatchConfig extends DefaultBatchConfigurer {
        @Autowired
        private DataSource dataSource;
    
        @Override
        protected PlatformTransactionManager createTransactionManager() {
            return new DataSourceTransactionManager(dataSource);
        }
    }
    
  • 调整查询方法的事务配置
    你虽然给getModuleList配置了Isolation.READ_UNCOMMITTED,但如果该方法的事务传播属性被设置为REQUIRES_NEW,或者第二步的操作本身在独立的只读事务中,也会导致无法读取到第一步已提交的数据。可以去掉getModuleList的事务注解,或者将查询方法的传播属性改为SUPPORTS,避免开启新的独立事务。
  • 检查Step执行配置
    如果你配置了异步并行Step,会导致Step2在Step1未执行完成时就启动,自然查询不到Step1未写入完成的数据。如果是顺序执行的任务,确保Step1完全执行成功后再启动Step2,同时不要自定义修改Step的自动提交策略。
  • 小代码优化提醒
    你示例代码中moduleService.updateModuleList遍历item时直接使用了p1-p4四个变量,实际运行时要确保是从当前遍历的item对象中获取对应属性,避免参数传错导致插入空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:18:03