JobExecutionListener
- 스프링 배치에서 전 처리, 후 처리를 하기 위해 사용된다.
- 2가지의 구현 방식이 있다.
- interface 구현
- @Annotation 정의
- JobExecutionListener를 interface 형식으로 구현하면 아래와 같다.
public static class SavePersonJobExecutionListener implements JobExecutionListener{
// job 실행전에 호출
@Override
public void beforeJob(JobExecution jobExecution) {
log.info("beforeJob");
}
// Job 실행 후에 호
@Override
public void afterJob(JobExecution jobExecution) {
int sum = jobExecution.getStepExecutions().stream()
.mapToInt(StepExecution::getCommitCount)
.sum();
log.info("afterJob : {}", sum);
}
}
- job 이 실행되기 전, 후에 다음과 같은 과정이 실행된다.
- JobExecutionListener를 Annotation 형식으로 구현하면 아래와 같다.
public static class SavePersonAnnotationJobExecutionListener {
// job 실행전에 호출
@BeforeJob
public void beforeJob(JobExecution jobExecution) {
log.info("annotationBeforeJob");
}
// Job 실행 후에 호
@AfterJob
public void afterJob(JobExecution jobExecution) {
int sum = jobExecution.getStepExecutions().stream()
.mapToInt(StepExecution::getCommitCount)
.sum();
log.info("annotationAfterJob : {}", sum);
}
}
- 위와 같이 annotation 방식으로 구현이 가능하다.
- StepExecutionListener를 interface 형식으로 구현하면 아래와 같다.
public static class SavePersonStepExecutionListener{
@BeforeStep
public void beforeStep(StepExecution stepExecution){
log.info("beforeStep");
}
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution){
log.info("afterStep; {}", stepExecution.getWriteCount());
return stepExecution.getExitStatus(); // 상태를 반환
}
}
- step 이 실행되게 전, 후에 다음과 같은 과정이 실행된다.
- ExitStatus 객체를 반환값으로 사용할 수 있다.