본문 바로가기

강의/스프링배치

스프링 배치 실행 - incrementer()

jobParameter 값을 해당 job을 식별할 수 있는 유일한 값이다.

일반적으로 동일한 jobParameter 값으로는 재시작을 할 수 없다.

 

그러나 job이 실행되기 전, 선행되어야 하는 job이 존재하고,

이 job의 parameter가 동일한 경우가 있을 수 있다.

 

이러한 경우에 사용하는 것이 incrementer 이다.

 

incremental 속성은 validator와 동일하게 CommonJobProperties에 저장되고,

 

 

이 내용들은 결국에 SimpleJob 속성에 저장이 된다.

 

Spring batch 에서는 기본적으로 RunIdIncrementer 클래스를 제공하고 있으며

이를 이용하여 incrementer 사용할 수 있다.

 

RunIdIncrementer 클래스는 JobParametersIncrementer 인터페이스를 상속받고 있으며,

getNext라는 메서드를 보면 동작 원리를 이해할 수 있다.

 

기본적으로 "run.id" 라는 jobparameter 의 key값을 가지고 있으며,

이 key 값에 해당하는 value는 1에서 2, 3, 4 순차적으로 올라가면서 동일한 job도 재실행 가능하도록 해주는 것이다.

 

@RequiredArgsConstructor
@Configuration
public class ExecutionContextConfiguration {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

//    private final JobExecutionListener jobRepositoryListener;

    @Bean
    public Job batchJob1() {
        return jobBuilderFactory.get("batchJob1")
                .start(step1())
                .next(step2())
//                .validator(new DefaultJobParametersValidator(new String[]{"name","date"}, new String[]{"count"}))
//                .preventRestart()
                .incrementer(new RunIdIncrementer())
//                .listener(jobRepositoryListener)
                .build();
    }
}

 

물론 이것도 custom 하게 생성할 수도 있다.

 

아래와 같이 JobParametersincrementer interface를 상속 받아 직접 구현해주면 된다.

public class CustomJobParametersIncrementer implements JobParametersIncrementer {

    static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss");

    @Override
    public JobParameters getNext(JobParameters jobParameters) {

        String id = format.format(new Date());

        return new JobParametersBuilder().addString("run.id", id).toJobParameters();
    }
}

사용법은 아래와 같다.

@RequiredArgsConstructor
@Configuration
public class ExecutionContextConfiguration {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

//    private final JobExecutionListener jobRepositoryListener;

    @Bean
    public Job batchJob1() {
        return jobBuilderFactory.get("batchJob1")
                .start(step1())
                .next(step2())
//                .validator(new DefaultJobParametersValidator(new String[]{"name","date"}, new String[]{"count"}))
//                .preventRestart()
                .incrementer(new CustomJobParametersIncrementer())
//                .listener(jobRepositoryListener)
                .build();
    }
}

 

'강의 > 스프링배치' 카테고리의 다른 글

StepBuilderfactory  (0) 2023.01.15
simpleJob 아키텍처  (0) 2023.01.15
스프링 배치 실행 - preventRestart()  (0) 2023.01.14
SimpleJob - 개념 및 API 소개 (validator)  (0) 2023.01.10
SimpleJob - 개념 및 API 소개  (0) 2023.01.10