不注入spring批处理服务层中的nullpointer异常

问题描述 投票:-1回答:1

我正在使用Spring Boot处理Spring Batch。

我正在尝试在ItemWriter中注入服务层但它无法正常工作。

我得到的服务为null

    @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);

    }

}

我错过了什么?

spring spring-boot spring-batch spring-boot-test spring-batch-admin
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.