我正在使用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);
}
}
我错过了什么?
你已经掌握了它:使用new DataWriter()
你可以在不使用Spring-Boot的情况下创建自己的实例,因此Spring-Boot没有机会注入你需要的依赖项。
只需使用@Autowired
-Annotation(或通过@Bean
使用您自己的bean)注入'DataWriter',您就可以了。提示:您也可以使用构造函数注入,这样会更好,因为您对循环依赖是安全的。