package com.system.batch;
@Component
@Slf4j
public class MyJobListener implements JobExecutionListener {
@Override
public void beforeJob(JobExecution jobExecution) {
log.info("[job 시작] id : {}", jobExecution.getJobInstanceId());
}
@Override
public void afterJob(JobExecution jobExecution) {
if(jobExecution.getStatus() == BatchStatus.FAILED){
log.warn("[job 실패] 비상! 관리자에게 연락하세요");
}else{
log.info("[job 종료] 정상적으로 배치가 수행되었습니다");
}
}
}
✅ 2. 어노테이션을 사용한 간편한 방식
MyAnnotationListener.java
package com.system.batch;
@Slf4j
@Component
public class MyAnnotationListener {
@BeforeJob
public void announceStart(JobExecution jobExecution){
log.info("[job 시작] id : {}", jobExecution.getJobInstanceId());
}
@AfterJob
public void announceEnd(JobExecution jobExecution){
if(jobExecution.getStatus() == BatchStatus.FAILED){
log.warn("[job 실패] 비상! 관리자에게 연락하세요");
}else{
log.info("[job 종료] 정상적으로 배치가 수행되었습니다");
}
}
}
✅ 3. Configuration에 리스너 등록하기
ListenerExampleConfig.java
@Configuration
@RequiredArgsConstructor
public class ListenerExampleConfig {
private final JobRepository jobRepository;
private final Step exampleStep;
// 1. 리스너 주입 (어노테이션 방식이든 인터페이스 방식이든 상관없음)
private final MyAnnotationListener myListener;
@Bean
public Job listenerJob() {
return new JobBuilder("listenerJob", jobRepository)
.start(exampleStep)
.listener(myListener) // 여기에 등록!
.build();
}
}