Spring Batch服务层中的空指针异常未注入

时间:2019-02-17 01:52:00

标签: spring spring-boot spring-batch spring-boot-test spring-batch-admin

我正在使用Spring Boot进行Spring Batch。

我正在尝试在ItemWriter中注入服务层,但是它不起作用。

我得到的服务为空

    @Component
    public class DataWriter implements ItemWriter<String> {

        @Autowired
        PersonService service;

        @Override
        public void write(List<? extends String> messages) throws Exception {
            //personDao.getEmployee();
            System.out.println("I am in read");
            service.save();
            System.out.println("Writing the data ");
        }
    }

Service layer


    @Service
    public class PersonService {

        @Autowired 
        PersonDao dao;

        public void save() {
            System.out.println(dao);
        }
    }

配置文件

这是我的配置文件。我想我正在用新的关键字创建数据写入器对象,这可能是问题。如果是的话,我该如何修复它。

@Configuration
public class JobConfiguration {
    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired(required = true)
    public JobLauncher JobLauncher;

    @Autowired
    Job processJob;

    @Bean
    public Job processJob() {
        return jobBuilderFactory.get("processJob").incrementer(new RunIdIncrementer()).listener(listener())
                .flow(orderStep1()).end().build();
    }

    @Bean
    public Step orderStep1() {
        return stepBuilderFactory.get("orderStep1").<String, String>chunk(1).reader(new DataReader())
                .processor(new DataProcessor()).writer(new DataWriter()).build();
    }

    @Bean
    public JobExecutionListener listener() {
        return new JobCompletionListener();
    }



    @Scheduled(cron = "${scheduling.job.job1}")
    public void handle() throws Exception {

        JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
                .toJobParameters();
        JobLauncher.run(processJob, jobParameters);

    }

}

我想念什么?

1 个答案:

答案 0 :(得分:0)

您已经自己掌握了它: 使用new DataWriter()可以在不使用Spring-Boot的情况下创建自己的实例,因此Spring-Boot没有任何机会注入所需的依赖项。

只需使用@Autowired-注解(或通过@Bean用您自己的bean)注入“ DataWriter”,就可以了。 提示:您也可以使用构造函数注入,这会更好,因为您可以安全地使用循环依赖。