Repeat
- 특정 조건이 충족될 때까지 Job또는 Step을 반복함
- RepeatOperation을 사용해서 Step의 반복과 Chunk 반복을 함
- 기본 구현체로 RepeatTemplate을 제공함
반복을 종료할 것인지 여부 결정 세 가지 항목
RepeatStatus
- 스프링 배치의 처리가 끝났는지 판별하기 위한 열거형 enum
=> CONTINUABLE : 작업이 남아있음
=> Finished : 더이상의 반복이 없음
CompletionPolicy
- RepleatTemplatedml iterated 메소드 안에서의 반복을 중단할지 결정
- 정상 종료를 알리는데에 사용함.
- 실행 횟수 또는 완료시기, 오류 발생시 수행할 작업에 대한 반복여부 결정
- 정상 종료를 알리는데 사용함.
ExceptionHandler
- RepeatCallback 안에서 예외가 발생하면 RepeatTemplate 가 ExceptionHandler 를 참조해서 예외를 다시 던질지 여부 결정
RepeatTemplate repeatTemplate = new RepeatTemplate();
repeatTemplate.setCompletionPolicy(new SimpleCompletionPolicy(10));
repeatTemplate.iterate(new RepeatCallback() {
private int count = 0;
@Override
public RepeatStatus doInIteration(RepeatContext context) {
System.out.println("Executing iteration: " + count);
count++;
return RepeatStatus.CONTINUABLE;
}
});
FaultTolerant
- 스프링 배치는 Job 실행 중에 오류가 발생할 경우 장애를 처리하기 위한 기능을 제공함
=> 이를 통해 복원력을 향상시킬 수 있음
- Skip과 Retry기능을 제공함
Skip
- ItemReader /ItemPRocessor / ItemWriter에 추가 가능
Retry
- ItemProcessor / ItemWriter에 적용 가능
FaultTolreant 구조는 청크 기반 프로세스 기반위에 Skip과 Retry기능이 추가되어 재정의되어있음
Skip
- 데이터를 처리하는동안 설정된 Exception이 발생했을 경우, 해당 데이터 처리를 건너뛰는 기능
- 데이터의 사소한 오류에 대해 Step의 실패 처리 대신 Skip을함
- ItemReader에서 예외가 발생하면 해당 아이템만 스킵하고 계속 진행함
- ItemProcessor와 ItemWriter는 예외가 발생하게 되면, 청크의 처음으로 돌아가서, 스킵된 아이템을 제외한 나머지 아이템을 가지고 처리함.
SkipPolicy
- 예외 발생시, 어떤 예외를 스킵할지 결정하는 정책
- 반환 값이 true이면 skip함
@Bean
public Step step(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("step")
.<Integer, String>chunk(2)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.faultTolerant()
.skip(CustomException.class)
.skipLimit(2)
.build();
}
- skipLimit으로 몇번까지 예외를 스킵할 수 있는지 정할 수 있음
Retry
- 특정 예외가 발생했을 때 작업을 중단하지 않고, 일정 횟수만큼 재시도할 수 있게 하는 기능
@Bean
public Step step(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("step")
.<Integer, String>chunk(2)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.faultTolerant()
.retry(CustomRetryException.class)
.retryLimit(3)
.build();
}
- 오류 발생시, Retry 매커니즘이 작동
- RetryPolicy에 설정된 재시도 횟수 만큼 반복함
'Spring' 카테고리의 다른 글
Spring Batch - ItemProcessor, ItemWriter (0) | 2024.07.06 |
---|---|
Spring Batch - ItemReader (0) | 2024.06.29 |
Spring Batch - Chunk (0) | 2024.06.22 |
Spring Batch - Flow (0) | 2024.06.15 |
스프링 배치 - Job / Step (0) | 2024.06.05 |