프로젝트를 진행하면서 사용했던 Spring Batch에 대해 정리해 보자
스프링 배치
Job
스프링 배치의 핵심은 Job이다. Job은 배치에서 가장 큰 단위이다.
Job 내부에 각 로직 처리 순서 부분에 해당하는 게 Step이다. 따라서, 하나의 Job에 여러 개의 Step이 있는 1:N 관계이다.
Step
스탭은 Tasklet 또는 ItemReader, ItemWriter, ItemProcessor로 구성된다.
그런데, Tasklet보다는 Chunk 기반으로 적극 사용하라고 멘토님께 조언을 받을 수 있었다.
Chunk로 하면 Chunk size 단위로 처리할 수 있어서 그런 것 같다.
프로젝트를 하며 1시간마다 배치가 돌아가야 했다. 그런데, 배포 환경에서 배치가 실패하면 절대 안 되는 일이다. 따라서, 에러가 발생해도 무시하거나 배치를 재시작해야 한다.
따라서, 나는 step을 다음과 같이 구성했다.
@Bean
public Step step() {
return stepBuilderFactory.get(BOOK_INTEGRATION_STEP)
.startLimit(5)//재시작 5번 가능
.<BookEntity, BookEntity>chunk(CHUNK_SIZE)
.reader(aladinBatchItemReader)
.writer(aladinBatchItemWriter)
.faultTolerant()
.retryLimit(3) //재시도 3번 가능
.retry(Exception.class)
.skip(Exception.class)
.skipLimit(100)
.listener(bookIntegrationStepListener)
.listener(bookIntegrationSkipListener)
.listener(successStepListener)
.build();
}
startLimit, retryLimit, retry, skip, skipLimit
해당 배치 동작 시 발생할 수 있는 문제들에 대해서 처리하고자 했다.
이때, 재시도 기능을 활성화하기 위해서는 faultTolerant 메서드를 호출해야 한다.
(이후 내용은 추후 추가할 예정....)
'Spring' 카테고리의 다른 글
[Spring]JUnit5를 통한 테스트 코드 구현 (0) | 2023.06.12 |
---|---|
[Spring] AOP (0) | 2022.10.27 |
[Spring]Mybatis 연결 - root-context.xml 설정 (0) | 2022.10.25 |
[Spring] 게시판 파일 기능 설정 (0) | 2022.10.24 |
[Spring] Filter, Interceptor (0) | 2022.10.21 |