Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초
applying-batch-listeners-for-monitoring
✅ 1. 배치 시작과, 배치끝을 알려주는 리스너 작성
JobLoggerListener.java
package com.batch.settlement.listener;
@Slf4j
@Component
public class JobLoggerListener {
private static final String START_MESSAGE = "'{}' 배치를 시작합니다!";
private static final String END_MESSAGE = "'{}' 배치가 종료되었습니다. (상태 : {})";
@BeforeJob
public void beforeJob(JobExecution jobExecution) {
log.info("=================================");
log.info(START_MESSAGE, jobExecution.getJobInstance().getJobName());
log.info("=================================");
}
@AfterJob
public void afterJob(JobExecution jobExecution){
long duration = Duration.between(
jobExecution.getStartTime(),
jobExecution.getEndTime()
).toMillis();
log.info("=================================");
log.info(END_MESSAGE, jobExecution.getJobInstance().getJobName(), jobExecution.getStatus());
log.info("총 소요 시간: {} ms", duration);
log.info("=================================");
if(jobExecution.getStatus() == BatchStatus.FAILED){
log.error("배치가 실패했습니다!");
}
}
}
✅ 2. 리스너 등록하기
SettlementJobConfig.java
private final JobLoggerListener jobLoggerListener;
@Bean
public Job settlementJob(){
return new JobBuilder("settlementJob", jobRepository)
.listener(jobLoggerListener) // 리스너 추가!
.start(settlementStep())
.build();
}
✅ 3. 배치 실행 및 동작 확인