이번 글에서는 Job의 시작과 뒤에 동작을 추가할 수 있는 Listener에 대해 알아볼텐데요, 이 기능을 이용해 시작과 끝 로그를 찍어보겠습니다.
먼저 리스너 클래스를 만들텐데요, JobExecutionListener 인터페이스를 구현합니다. 그리고 beforeJob()과 afterJob()을 오버라이딩합니다.
@Slf4j
public class JobLoggerListener implements JobExecutionListener {
private static String BEFORE_MESSAGE = "{} Job is Runnung";
private static String AFTER_MESSAGE = "{} Job is Done. (Status: {})";
@Override
public void beforeJob(JobExecution jobExecution) {
log.info(BEFORE_MESSAGE, jobExecution.getJobInstance().getJobName());
}
@Override
public void afterJob(JobExecution jobExecution) {
log.info(AFTER_MESSAGE, jobExecution.getJobInstance().getJobName(),
jobExecution.getStatus());
if (jobExecution.getStatus() == BatchStatus.FAILED) {
log.info("Job is Failed");
}
}
}
그리고 이전의 검증 클래스와 같이 이 리스너 클래스를 Job에 등록해주면 됩니다.
@Bean
public Job jobListenerJob(Step jobListenerStep) {
return jobBuilderFactory.get("jobListenerJob") // 이 Job의 이름을 지정
.incrementer(new RunIdIncrementer()) // Job의 식별자인 id값 자동 증가
.listener(new JobLoggerListener()) // Job의 리스너 등록
.start(jobListenerStep) // 실행될 Step을 지정
.build();
}
다음 글에서는 DB의 주문 테이블에서 데이터를 읽고 처리해 정산 테이블에 이관하는 방법을 알아보겠습니다.