Springbatch中我们一般使用jobParameters传递job参数,但是jobParameters能够传递的参数类型有限,仅限String Date等几种类型。实际我们可以使用jobExecutionContext来传递复杂的参数给job中各个step使用。
上码:
放入:
@Bean
public JobExecutionListener jobListener(){
return new JobExecutionListener() {
@Override
public void beforeJob(JobExecution jobExecution) {
List<BookInfo> list = new ArrayList<>();
BookInfo aa= new BookInfo();
aa.setAuthor("Bruce");
aa.setBookId(Long.getLong("111"));
aa.setBookName("zzzz");
aa.setIsdn(Double.valueOf("11"));
aa.setPublicDate(new Date());
list.add(aa);
ExecutionContext ex1=new ExecutionContext();
ex1.put("xxtempList",list);
jobExecution.setExecutionContext(ex1);
System.out.println("**************** Job Begin!! *******************");
}
... ...
}
以上在JobExecutionListener 的beforeJob中加载类型为List的参数名字为xxtempList放入jobExecutionContext
获取:
使用@StepScope注解开启后绑定,使用@Value("#{jobExecutionContext[‘xxtempList’]}")直接注入前面设置的参数
@Component
@StepScope
public class BookInfoProcesor implements ItemProcessor<BookInfo,BookInfo> , ItemStream {
@Value("#{jobExecutionContext['xxtempList']}")
List<BookInfo> test;
@Override
public BookInfo process(BookInfo bookInfo) throws Exception {
System.out.println("Run Processer!! "+bookInfo.getBookId());
/*List<BookInfo> list= (List<BookInfo>) test.get("xxtempList");
BookInfo bk= list.get(0);*/
return bookInfo;
}