DevBoi

[Spring Batch] How to FailOver(Skip) 본문

Develop/[Spring Batch]

[Spring Batch] How to FailOver(Skip)

HiSmith 2022. 4. 10. 13:49
반응형

스프링 배치에서는 중간에 실패시에 많은 전략을 제공해준다.

 

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 방식으로 보내주던것을 단건으로 처리하는 것을 볼 수 있다.

 

반응형