I am working on Spring Batch with Spring Boot.
I am trying to inject service layer in ItemWriter but it is not working.
I am getting service as 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 file
This is my configuration file.I think i am creating datawriter object by new key word and it may be problem.If it is then how i fix it.
@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);
}
}
What am I missing?