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 (정수원 강사님)
반응형
'Spring' 카테고리의 다른 글
[Spring Batch] @JobScope,@StepScope (0) | 2023.07.19 |
---|---|
[Spring Batch] SimpleFlow 아키텍처 (0) | 2023.07.17 |
[Spring Batch] FlowJob 아키텍처 (0) | 2023.07.11 |
[Spring Batch] TaskletStep 아키텍처 (0) | 2023.07.11 |
[Spring Batch] SimpleJob 아키텍처 (0) | 2023.07.10 |