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 |