Spring

[Spring Batch] Skip, Retry 정책

꾸준함. 2023. 9. 14. 01:05

1. ItemReader

  • Skip 기능만 제공
  • Retry 기능은 제공하지 않음

 

전체적인 흐름

  • Step 기능이 실행되고 RepeatTemplate 통해 반복해서 ChunkOrientedTasklet 실행시킴
  • ChunkOrientedTasklet은 FaultTolerantChunkProvider를 통해 Item을 읽어옴
  • FaultTolerantChunkProvider는 내부적으로 RepeatTemplate을 통해 ItemReader를 통해 한 건의 데이터를 반복적으로 읽어옴
    • 예외가 발생하지 않으면 반복적으로 Item을 읽어옴
  • 예외가 발생할 경우 Skip 기능이 설정되었는지 확인
    • Skip 기능이 활성화되지 않았거나 SkipLimit 횟수를 초과했을 경우 NonSkippableReadException 예외 발생
    • Skip이 설정되어 있고 SkipLimit 횟수를 초과하지 않았을 경우 해당 Item은 Skip 하고 다음 Item을 읽어옴
    • Skip 설정 여부와 SkipLimit은 limitCheckingItemSkipPolicy를 통해 확인

 

 

2. ItemProcessor

  • Skip과 Retry 기능 모두 제공

 

전체적인 흐름

  • TaskletStep 기능이 실행되고 RepeatTemplate 통해 반복해서 ChunkOrientedTasklet 실행시킴
  • ChunkOrientedTasklet은 FaultTolerantChunkProcessor를 실행시키고 Chunk 사이즈만큼 발생해서 ChunkIterator 통해 수행
  • Retry 기능이 설정되어있다면 RetryTemplate을 통해 ItemProcessor 기능을 수행
    • RetryCallback과 RecoveryCallback 기능 수행
  • RetryPolicy 통해 retry 가능 여부 파악
    • retry 불가하다면 RecoveryCallback 수행
    • RecoveryCalback은 LimitCheckingItemSkipPolicy 통해 Skip 활성화 여부와 SkipLimit 횟수 체크
    • Skip이 활성화되어있고 SkipLimit 횟수 초과 안 했을 경우 예외 발생한 item Skip
    • Skip 설정이 없거나 SkipLimit 횟수 초과했을 경우 SkipLimitExceededException 예외 발생시켜 Step 실패 처리 및 종료
  • retry 가능하다면 특별한 기능 없이 ItemProcessor 기능 수행
    • 이 떄 예외가 발생하고 RetryLimit이 초과할 경우 Step을 재시도

 

 

3. ItemWriter

  • Skip과 Retry 기능 모두 제공
  • ItemProcessor와 과정이 거의 비슷

 

전체적인 흐름

  • TaskletStep 기능이 실행되고 RepeatTemplate 통해 반복해서 ChunkOrientedTasklet 실행시킴
  • ChunkOrientedTasklet은 FaultTolerantChunkProcessor를 실행
  • Retry 기능이 설정되어 있다면 RetryTemplate을 통해 ItemWriter 기능을 수행
    • RetryCallback과 RecoveryCallback 기능 수행
  • RetryPolicy 통해 retry 가능 여부 파악
    • retry 불가하다면(예외가 발생하고 retryLimit이 초과한 경우) RecoveryCallback 수행
    • RecoveryCalback은 LimitCheckingItemSkipPolicy 통해 Skip 활성화 여부와 SkipLimit 횟수 체크
    • Skip이 활성화되어있고 SkipLimit 횟수 초과 안 했을 경우 doScan으로 복구 작업 (예외가 발생하지 않은 item들만 모아서 최종 처리)
    • Skip 설정이 없거나 SkipLimit 횟수 초과했을 경우 ExhaustedRetryException 예외 발생시켜 Step 실패 처리 및 종료
  • retry 가능하다면 ItemWriter 기능 수행하고 마지막 Chunk일 경우 Step 성공 처리 및 종료
    • 이때 예외가 발생할 경우 Step 재시도

 

 

출처

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch (정수원 강사님)

 

반응형