Study/Spring Batch
스프링 배치 실행 -incrementer()
공29
2024. 4. 11. 07:48
1) 기본 개념
- JobParameters 에서 필요한 값을 증가시켜 다음에 사용될 JobParameters 오브젝트를 리턴
- 기존의 JobParameter 변경없이 Job 을 여러 번 시작하고자 할때
- RunIdIncrementer 구현체를 지원하며 인터페이스를 직접 구현할 수 있음
2) 구조
3) 설정
3-1) CustomJobParametersIncrementer 구현
@Bean
public Job batchJob() {
return this.jobBuilderFactory.get("batchJob")
.incrementer(new CustomJobParametersIncrementer())
.start(step1())
.next(step2())
.next(step3())
.build();
}
public class CustomJobParametersIncrementer implements JobParametersIncrementer {
static final SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-hhmmss");
public JobParameters getNext(JobParameters parameters) {
String id = format.format(new Date());
return new JobParametersBuilder().addString("run.id", id).toJobParameters();
}
}
JobParametersIncrementer 인터페이스의 getNext 메서드를 구현한다.
기존의 JobParameters의 변경 없이, 실행할 때마다 값이 변경되는 run.id를 추가하여 재시작가능하도록 한다.
3-2) RunIdIncrementer
@Bean
public Job batchJob() {
return this.jobBuilderFactory.get("batchJob")
.incrementer(new RunIdIncrementer()) // Spring에서 기본 제공
.start(step1())
.next(step2())
.next(step3())
.build();
}
Spring에서 기본 제공하는 RunIdIncrementer을 사용해도 된다.
public class RunIdIncrementer implements JobParametersIncrementer {
// 코드 생략...
public JobParameters getNext(@Nullable JobParameters parameters) {
JobParameters params = parameters == null ? new JobParameters() : parameters;
JobParameter runIdParameter = (JobParameter)params.getParameters().get(this.key);
long id = 1L;
if (runIdParameter != null) {
try {
id = Long.parseLong(runIdParameter.getValue().toString()) + 1L;
} catch (NumberFormatException var7) {
throw new IllegalArgumentException("Invalid value for parameter " + this.key, var7);
}
}
return (new JobParametersBuilder(params)).addLong(this.key, id).toJobParameters();
}
}
id 값을 1씩 증가시켜 재시작되도록 하는 로직이다.