BackEnd/Spring Batch
[Spring Batch 정리하기] 6. Listener
Wonol
2024. 8. 6. 09:01
반응형
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
반응형