Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 배치
- spring cloud
- TypeScript
- thread
- 키클락
- 디자인패턴
- Spring Cloud Netfilx Eureka
- saga pattern
- JPA
- 디자인 패턴
- 스레드
- Parallel Old GC
- Java
- Transaction Pattern
- 타입스크립트
- Spring Boot Actuator
- Serial GC
- Resilinece4j
- 멀티스레드
- MSA
- 알고리즘
- 생산자 소비자 패턴
- zipkin
- 스프링 배치
- 사가 패턴
- The law of Demeter
- Action Pattern
- 체인 패턴
- spring batch
- java 정렬
Archives
- Today
- Total
PSD( Private-Self-Development )
Spring Batch 반복 및 오류 제어 본문
1. Repeat
- 특정 조건이 충족 혹은 충족 전까지 Job 또는 Step 을 반복하도록 구성 가능 하다.
- 스프링 배치에서는 Step, Chunk 반복을 RepeatOperation을 사용하여 처리하고 있다.
- 기본 구현체로 RepeatTemplate를 제공한다.
반복을 종료할 것인지 여부를 결정하는 세 가지 항목
- RepeatStatus
- 처리가 끝났는지 판별하기 위한 열거형(Enum)
- CONTINUALBE : 작업이 남아 있음
- FINISHED : 더 이상의 반복 없음
- 처리가 끝났는지 판별하기 위한 열거형(Enum)
- CompletionPolicy
- RepeatTemplate 의 iterate 메서드 안에서 반복 중단을 결정한다.
- 실행 횟수 혹은 완료시기, 오류 발생 시 수행할 작업에 대한 반복 여부 결정
- 정상 종료를 알리는데 사용된다.
- ExceptionHandler
- RepeatCallback 안에서 예외가 발생하면 RepeatTemplate 가 ExceptionHandler를 참조하여 예외를 다시 던질지 결정한다.
- 예외를 받아서 다시 던지게 되면 반복 종료
- 비정상 종료를 알리는데 사용된다.
2. FaultTolerant
- Job 실행중 오류가 발생한 경우, 장애 처리를 위한 기능을 제공한다. 이를 통해 복원력을 향상시킬 수 있다.
- Retry 혹은 Skip 기능을 활성화 하여 내결함성을 가진 서비스를 구현 가능하도록 해준다.
- Skip
- itemReader / ItemProcessor / ItemWriter 에 적용 가능
- Retry
- temProcessor / ItemWriter 에 적용 가능
- Skip
- FaultTolerant 구조는 청크 기반
내결함성?
작업 진행 도중 에러가 발생하여도
다른 작업은 정상 진행 되도록 하는 성질
결함에 대한 내성
3. Skip
- 작업 실행 중 설정된 Exception 이 발생한 경우, 해당 데이터 처리를 건너뛰는 기능
- 데이터의 사소한 오류에 대한 Step 실패 가 아닌 Skip 처리 함으로 써, 배치 수행의 빈번한 실패를 줄일 수 있게 한다.
- Chunk Process 중간에 skip 된 경우, 다시 해당 Chunk 구간의 처음으로 돌아간 후 skip 된 내용은 제외하고 진행된다.
- Skip 기능은 내부적으로 SkipPolicy 를 통해서 구현되어 있다.
- SkipPolicy
- AlwaysSkipItemSkipPolicy : 항상 skip
- ExceptionClassifierSkipPolicy : 예외 대상을 분류하여 skip 여부 결정
- CompositeSkipPolicy : 여러 SkipPolicy 를 탐색하면서 skip 여부 결정
- LimitCheckingItemSkipPolicy(기본값) : Skip 카운터 및 예외 등록 결과에 따라 skip 여부 결정
- NeverSkipItemSkipPolicy : skip 을 하지 않는다.
- SkipPolicy
예시
public Step step() {
return stepBuilderFactory.get("step")
.<I, O>chunk(10)
.reader(ItemReader)
.writer(ItemWriter)
.falutTolerant()
.skip(Class<? extends Throwable> type) // 예외 발생 시 Skip 처리 할 Exception 타입 설정
.skipLimit(int skipLimit) // Skip 처리 한도 횟수 설정
.skipPolicy(SkipPolicy skipPolicy) // Skip 정책 설정
.noSkip(Class<? extends Throwable> type)// 예외 발생 시 Skip 처리 하지 않을 Exception 타입 설정
.build();
}
4. Retry
- 작업 실행 중(ItemReader 제외) 설정된 Exception 이 발생한 경우, 데이터 처리를 재시도 하는 기능
- Skip과 동일하게(대부분 동일 해당 상황에서의 처리가 다를 뿐) 배치 수행의 빈번한 실패를 줄일 수 있게 한다.
- RetryPolicy
- AlwaysRetryPolicy : 항상 재시도
- ExceptionClassifierRetryPolicy : 예외 대상을 분류하여 재시도 여부 결정
- CompositeRetryPolicy : 여러 RetryPolicy 를 탐색하면서 재시도 여부 결정
- SimpleRetryPolicy(기본값) : 재시도 카운터 및 예외 등록 결과에 따라 재시도 여부 결정
- MaxAttemptsRetryPolicy : 재시도 횟수에 따라 재시도 여부 결정
- TimeoutRetryPolicy : 주어진 시간동안 재시도
- NeverRetryPolicy : 최초 한번만 허용
- BackOffPolicy
- 다시 재시도 하기까지의 지연시간 설정
- 처리 시간이 긴 데이터가 있을 경우, BackOffPolicy 로 재시도 시간 간격을 조정하자.
예시
public Step step() {
return stepBuilderFactory.get("step")
.<I, O>chunk(10)
.reader(ItemReader)
.writer(ItemWriter)
.falutTolerant()
.retry(Class<? extends Throwable> type) // 예외 발생 시 retry 할 에외 타입 설정
.retryLimit(int skipLimit) // retry 제한 횟수 설정
.retryPolicy(SkipPolicy skipPolicy) // retry 정책 설정
.noRetry(Class<? extends Throwable> type) // 예외 발생 시 retry 하지 않을 에외 타입 설정
.backOffPolicy(BackOffPolicy backOffPolicy) // 다시 retry 하기 까지의 시간 설정
.noRollback(Class<? extends Throwable> type) // 예외 발생 시 rollback 하지않을 예외 타입 설정
.build();
}
참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard
'Backend > Spring Batch' 카테고리의 다른 글
Spring Batch 이벤트 리스너 (0) | 2023.04.24 |
---|---|
Spring Batch 멀티 스레드 프로세싱 (0) | 2023.04.19 |
JobBuilder 와 StepBuilder 그리고 배치 상태 종류 (0) | 2023.03.15 |
Spring Batch 도메인 이해 (0) | 2023.02.06 |
Spring Batch 란? (0) | 2023.01.17 |