일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- JPA 공부
- JPA스터디
- 자바공부
- 플러터 공부
- JPA예제
- JPA
- Kafka
- Flutter
- 알고리즘공부
- 스프링공부
- 플러터 개발
- 카프카
- 코테준비
- K8S
- Axon framework
- nestjs스터디
- DDD
- nestjs공부
- 스프링 공부
- nestjs
- 스프링부트
- 스프링부트공부
- 기술공부
- 스프링
- JPA공부
- 기술면접공부
- 자료구조공부
- querydsl
- 코테공부
- Today
- Total
DevBoi
[Spring Batch] How to FailOver(Skip) 본문
스프링 배치에서는 중간에 실패시에 많은 전략을 제공해준다.
1. Skip
Skip 옵션은 각각의 단위에서 사용이 가능하다.
1. ItemReader
해당 부분에서 skip을 사용하는 경우를 생각해보자
ItemReader에서 Item을 읽다가 Exception이 발생하는 경우, 해당 아이템을 skip으로 넘기고 다음 아이템을 읽는다.
예를 들어, Item2 를 읽다가 Exception이 발생하면, 넘기고 Item3를 읽는다.
2.ItemProcessor
해당 ItemProcessor에서 Exception이 발생한다면, ItemReader로 돌아간다.
ItemReader가 캐싱하고 있는 Input Chunk를 다시 받아와서 처음 부터 읽는다
해당 Exception이 발생한 부분을 만나게되면 skip 하고 다음 부분을 처리한다.
3. ItemWriter
ItemWriter 부분에서 Exception이 발생하게 되면, ItemReader로 돌아가게 된다
동일한 방식으로 ItemProcessor가 통과 되게 되고
Processor에서 Writer로 넘겨줄때, List방식이 아니라, 단건으로 넘기게 된다.
예를 들어서 List<Market>으로 processor -> writer 였다면, Market 단건으로 넘기게 된다,
단건으로 받아서 Exception되는 부분을 만나게 되면 skip하게 된다.
SkipPolicy (Skip 정책)
스킵의 전체적인 과정은 위와 같다.
상위에서 스킵이 발생하게 되면, 우선적으로 스킵 정책을 검사하게 된다.
스킵을 정책을 통과하면, 스킵을 하게 되고 가장 통용되고 있는 스킵정책은 아래 두가지 이다.
1. SkipCount <= limitSkipCount 인 경우
2. Skip 가능한 Exception일때
SkipPolicy는 내부적으로 Map 형태의 Classifier라는 객체를 참조한다.
Map<Throwable, boolean> 의 형태를 가지고 있고 해당 skip이 가능한 Exception인 경우 true의 값을 가진다.
해당 classifier라는 객체는, skip이 가능한 Exception인지를 검사하는 역할을 가진다.
SkipPolicy의 종류에는 아래와 같이 있다.
-항상 스킵
-무조건 노스킵, 스킵할 수 없음
-여러 정책을 체크해서 스킵 여부 결정
-스킵 카운터, 정의된 예외 에 대해서 확인 후 스킵
위는 필요에 따라 재 구현할 수 있다.
Writer에서, Exception이 발생하면, Processor로 다시 돌아가서 단건으로 Wrtier로 보내고, 집계를 하는 방식으로 동작한다.
단, List 방식으로 보내주던것을 단건으로 처리하는 것을 볼 수 있다.
'Develop > [Spring Batch]' 카테고리의 다른 글
[Spring Batch] Chunk란? (0) | 2022.04.10 |
---|---|
[Spring Batch] How to FailOver(Retry) (0) | 2022.04.10 |
[Spring Batch] Not Use in Meta Tables (0) | 2022.04.10 |
[Spring Batch] Meta Tables (0) | 2022.04.10 |
[Spring Batch] Spring Batch에서 멱등성을 유지하는 방법 (0) | 2022.04.10 |