반응형
1. 1. Listener(리스너)
1.1. 1-1) 기본 개념
- 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트
- 각 단계별로 로그기록을 남기거나 소요된 시간을 계산하거나 실행상태 정보들을 참조 및 조회 가능
- 사용하기 위해서는 Listener 를 등록해야 하며 등록은 각 API 설정에서 단계별로 지정 가능
1.2. 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. 1-3) 구현 방법
- 어노테이션 방식
- 인터페이스를 구현할 필요 없음
- 클래스 및 메소드명을 자유롭게 작성 가능
<java />
@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) {
}
}
- 인터페이스 방식
<java />
@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-4) 프로세스

1.5. 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 |