исключение nullpointer в сервисном сервисе Spring Batch не вводится - PullRequest
0 голосов
/ 17 февраля 2019

Я работаю над Spring Batch с Spring Boot.

Я пытаюсь внедрить слой обслуживания в 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);
        }
    }

файл конфигурации

Это мой файл конфигурации. Я думаю, что я создаю объект datawriter с помощью нового ключевого слова, и это может быть проблемой. Если это то, как я могу это исправить.

@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 голосов
/ 18 февраля 2019

Вы уже получили это сами: с new DataWriter() вы создаете свой собственный экземпляр без использования Spring-Boot, и поэтому у Spring-Boot нет никаких шансов внедрить нужные вам зависимости.

Просто введите ваш 'DataWriter 'также с аннотацией @Autowired (или с вашим собственным компонентом через @Bean), и все будет в порядке.Подсказка: вы также можете использовать Constructor Injection, что будет лучше, потому что вы безопасны для циклических зависимостей.

...