모르지 않다는 것은 아는것과 다르다.

Spring Batch

JobExecutionDecider

채마스 2022. 2. 27. 01:24

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)) 가 실행될지 말지를 결정한다.



'Spring Batch' 카테고리의 다른 글

Spring Batch 메타 테이블  (0) 2022.04.02
성능 평가 Async Step vs Multi-Thread Step vs Partition Step vs Parallel Step  (0) 2022.02.27
Skip, Retry  (0) 2022.02.27
StepListener  (0) 2022.02.27
JobExecutionListener  (0) 2022.02.27