JobLauncher的代码:
@Component
@Controller
public class JobLauncherConfig {
@Autowired
private Job BatchJob;
@Autowired
private JobLauncher jobLauncher;
@Autowired
private ComDataHolder comDataHolder;
private long a;
@Scheduled(fixedDelay = 6000)
public void demoScheduled() throws Exception {
System.out.println("Scheduled run!");
a = a + 1;
comDataHolder.setTaskletloopcnt((long) 0);
JobParameters jobParameters = new JobParametersBuilder().addLong("var", a)
.addLong("cnt", comDataHolder.getTaskletloopcnt()).toJobParameters();
jobLauncher.run(BatchJob, jobParameters);
}
}
Job的代码:
@Configuration
@EnableBatchProcessing
public class Batchconfig implements StepExecutionListener {
@Autowired
private JobBuilderFactory jobBuliderFactory;
@Autowired
private StepBuilderFactory stepBuliderFactory;
private Map<String, JobParameter> parameters;
@Bean
public Job BatchJob() {
System.out.println("BatchJob Run!");
return jobBuliderFactory.get("BatchJob").listener(new JobListener()).start(step1())
.next(step2()).build();
}
@Bean
public Step step1() {
return this.stepBuliderFactory.get("step1").listener(this).<String, String>chunk(2)
.reader(reader()).processor(processor()).writer(writer()).build();
}
@Bean
public Step step2() {
return this.stepBuliderFactory.get("step2").listener(this).tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)
throws Exception {
System.out.println("**********************");
System.out
.println("this is tasklet step2!" + String.valueOf(parameters.get("cnt")));
System.out.println("**********************");
return null;
}
}).build();
}
@Bean
public ItemReader<String> reader() {
System.out.println("ItemReader run!");
List<String> strlist = new ArrayList<>();
strlist.add("00000001");
strlist.add("00000002");
strlist.add("00000003");
System.out.println("ItemReader end!");
return new ListItemReader<>(strlist);
}
@Bean
public ItemProcessor<String, String> processor() {
return new ItemProcessor<String, String>() {
@Override
public String process(String item) throws Exception {
System.out.println("ItemProcessor start!");
item = item + "processed";
System.out.println("ItemProcessor:" + item);
System.out.println("ItemProcessor end!");
return item;
}
};
}
@Bean
public ItemWriter<String> writer() {
return new ItemWriter<String>() {
@Override
public void write(List<? extends String> items) throws Exception {
System.out.println("ItemWriter start!");
for (String item : items) {
System.out.println("ItemWriter:" + item);
}
System.out.println("ItemWriter end!");
}
};
}
@Override
public void beforeStep(StepExecution stepExecution) {
System.out.println("Listener beforeStep");
parameters = stepExecution.getJobExecution().getJobParameters().getParameters();
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
System.out.println("Listener afterStep");
return null;
}
}
执行后只有第一次执行的Chunk的reader process 和write执行了
之后都没有执行