반응형
    
    
    
  1. Listener(리스너)
1-1) 기본 개념
- 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트
- 각 단계별로 로그기록을 남기거나 소요된 시간을 계산하거나 실행상태 정보들을 참조 및 조회 가능
- 사용하기 위해서는 Listener 를 등록해야 하며 등록은 각 API 설정에서 단계별로 지정 가능
1-2) 종류
- Job
 - JobExecutionListner -> Job 실행 전후
- Step
 - StepExecutionListener -> Step 실행 전후
 - ChunkListener -> Chunk 실행 전후(Tasklet 실행 전후), 오류 시점
 - ItemReaderListener -> ItemReader 실행 전후, 오류 시점(But, Item 이 Null 인 경우 호출 안 됨)
 - ItemProcessListener -> ItemProcessor 실행 전후, 오류 시점(But, Item 이 Null 인 경우 호출 안 됨)
 - ItemWriterListener -> ItemWriter 실행 전후, 오류 시점(But, Item 이 Null 인 경우 호출 안 됨)
- SkipListener
 - 읽기, 쓰기, 처리 Skip 실행 시점, Item 처리가 Skip 될 경우 Skip 된 Item 을 추적
- RetryListener
 - Retry 시작, 종료, 에러 시점
1-3) 구현 방법
- 어노테이션 방식
 - 인터페이스를 구현할 필요 없음
 - 클래스 및 메소드명을 자유롭게 작성 가능
@Slf4j
public class CustomChunkListener {
    private static final int MAX_READ_COUNT = 15;
    @BeforeChunk
    public void beforeChunkMethod(ChunkContext context) {
    }
    @AfterChunk
    public void afterChunkTest(ChunkContext context) {
        StepExecution stepExecution = context.getStepContext().getStepExecution();
        int readCount = stepExecution.getReadCount();
        if (readCount > MAX_READ_COUNT) {
            log.error("최대 ReadCount 초과");
            throw new RuntimeException("최대 ReadCount 초과");
        }
    }
    @AfterChunkError
    public void afterChunkErrorCall(ChunkContext context) {
    }
}- 인터페이스 방식
@Slf4j
public class CustomChunkListener implements ChunkListener {
    private static final int MAX_READ_COUNT = 15;
    @Override
    public void beforeChunk(ChunkContext context) {
    }
    @Override
    public void afterChunk(ChunkContext context) {
        StepExecution stepExecution = context.getStepContext().getStepExecution();
        int readCount = stepExecution.getReadCount();
        if (readCount > MAX_READ_COUNT) {
            log.error("최대 ReadCount 초과");
            throw new RuntimeException("최대 ReadCount 초과");
        }
    }
    @Override
    public void afterChunkError(ChunkContext context) {
    }
}1-4) 프로세스

1-5) 각 선언 방법 및 메소드 정보
- Listener 다중 선언 시 확인 필요
ex1: ChunkListener 와 ItemReaderListener 는 같이 동작하지 않음???
(정확한 원인은 잘 모르겠습니다만 예상하기로는 ChunkListener 다음으로 ItemReaderListener 가 동작하는데 이때 동일한 행위를 하기 때문이라고 추측)
ex2: ChunkListener 와 ItemProcessListener 는 같이 동작
ex3: ItemReadListener 와 ItemProcessListener 는 같이 동작
- JobExecutionListener

- StepExecutionListener

- ChunkListener

- ItemReaderListener

- ItemProcessListener

- ItemWriteListener

참고
- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard
반응형
    
    
    
  'BackEnd > Spring Batch' 카테고리의 다른 글
| [Spring Batch 정리하기] 5. 청크(Chunk) 프로세스 (0) | 2024.08.01 | 
|---|---|
| [Spring Batch 정리하기] 4. 실행하기 (0) | 2024.07.29 | 
| [Spring Batch 정리하기] 3. 도메인 (1) | 2024.07.25 | 
| [Spring Batch 정리하기] 2. DB Schema (0) | 2024.07.22 | 
| [Spring Batch 정리하기] 1. Spring Batch 개요 (0) | 2024.07.17 | 
