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

Spring Batch保存数据到数据库时抛出NullPointerException问题

问题根本原因

你在JobConfig的fileReadingStep方法中直接通过new Writer()手动实例化了Writer类,没有使用Spring容器托管的Bean实例。只有Spring容器创建、管理的Bean对象才会自动处理@Autowired注解的依赖注入,手动new出的对象不受Spring生命周期管控,内部标注了@Autowired的StudentRepo属性不会被自动赋值,因此为null,触发空指针异常。

解决方案

步骤1:注入Spring托管的Writer实例到JobConfig中

优先使用构造注入的方式引入已经标注@Component的Writer Bean,修改JobConfig的代码如下:

@Configuration
public class JobConfig {

    @Value("${inputFile}") 
    private Resource resource;

    @Autowired
    private ResourceLoader resourceLoader;

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;
    // 新增注入Writer
    private final Writer writer;
    // 构造方法新增Writer参数
    @Autowired
    public JobConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, Writer writer) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
        this.writer = writer;
    }

    // 其余代码不变...

    @Bean
    public Step fileReadingStep() {
        return stepBuilderFactory.get("File-Read-Step1")
                .<Student,Student>chunk(5)
                .reader(itemReader())
                .processor(new Processer()) // 注意:这里如果Processer类也有@Autowired依赖,同样需要改成注入Bean,不要new
                .writer(writer) // 替换原来的new Writer()
                .build();
    }
}

可选补充

如果你的自定义Processer类中也存在@Autowired注入的属性,需要按照和Writer相同的逻辑调整:先把Processer标注为@Component,再注入到JobConfig中替换new Processer()的写法,避免同样出现空指针问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:04