JobExecutionDecider
public class JobParametersDecide implements JobExecutionDecider {
public static final FlowExecutionStatus CONTINUE = new FlowExecutionStatus("CONTINUE");
private final String key;
public JobParametersDecide(String key) {
this.key = key;
}
@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
String value = jobExecution.getJobParameters().getString(key);
if(!StringUtils.hasText(value)) {
return FlowExecutionStatus.COMPLETED;
}
return CONTINUE;
}
}
- data paramerter 가 있으면 실행하고 없으면 실행하지 않게 설정할 수 있다.
- decide() 메서드는 FlowExecutionStatus의 상태를 결정하고, 이 상태에 따라서 배치의 실행 여부를 결정할 수 있다.
- 파라미터의 value 가 있는지 없는지 검사한다.
@Bean(JOB_NAME)
public Job userJob() throws Exception {
return this.jobBuilderFactory.get(JOB_NAME)
.incrementer(new RunIdIncrementer())
.start(this.saveUserStep())
.next(this.userLevelUpStep())
.listener(new LevelUpJobExecutionListener(userRepository))
.next(new JobParametersDecide("date"))
.on(JobParametersDecide.CONTINUE.getName())
.to(this.orderStatisticsStep(null, null))
.build()
.build();
}
- next(new JobParametersDecide("date")) 에서 해당 파라미터에 date라는 변수가 있는지 검사한다.
- on(JobParametersDecide.CONTINUE.getName()) 에서 값을 비교하고 그 결과에 따라서 to(this.orderStatisticsStep(null, null)) 가 실행될지 말지를 결정한다.