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

Spring Batch SkipPolicy中JobExecutionContext为null问题求助

问题根因

你当前通过new EmployeeSkipPolicy()手动创建的策略实例没有被Spring容器托管,类上添加的@JobScope、@Value属性注入、@BeforeStep生命周期回调全部不会被Spring触发,因此两个属性默认都是null。

解决方案
  • 第一步:给EmployeeSkipPolicy类添加@Component注解,将其交给Spring容器实例化管理
@Slf4j
@Component // 新增注解
@JobScope
public class EmployeeSkipPolicy implements SkipPolicy {
    // 原有代码保持不变
}
  • 第二步:在Step配置类中注入Spring托管的EmployeeSkipPolicy实例,不要手动new
// 配置类中先注入实例
@Autowired
private EmployeeSkipPolicy employeeSkipPolicy;

// Step构建时替换原有的new逻辑
SimpleStepBuilder simpleStepBuilder = steps.get("employeeJob")
            .allowStartIfComplete(true)
            .<Employee, Employee>chunk(10)
            .reader(employeeFlatFileItemReader) 
            .faultTolerant()
            .skipPolicy(employeeSkipPolicy) // 注入的Bean,不要new
            .listener(new EmployeeSkipListener())
            .listener(itemProcessListenerSupport())
            .processor(employeeProcessor);
补充优化建议
  • 如果你只是需要获取作业参数,可以直接通过SpEL注入对应参数值,不需要手动从ExecutionContext中读取,代码更简洁:
@Value("#{jobParameters['filePath']}")
private String filePath;

@Value("#{jobParameters['fileName']}")
private String fileName;
  • 写错误记录到CSV的逻辑建议放到SkipListener中实现,SkipPolicy只负责判断当前异常是否需要跳过,职责拆分更清晰,也符合Spring Batch的组件设计规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:00:01