모르지 않다는 것은 아는것과 다르다.

Spring Batch

JobExecutionListener

채마스 2022. 2. 27. 01:23

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 객체를 반환값으로 사용할 수 있다.



'Spring Batch' 카테고리의 다른 글

Skip, Retry  (0) 2022.02.27
StepListener  (0) 2022.02.27
ItemWriter  (0) 2022.02.27
ItemProcessor  (0) 2022.02.27
ItemReader  (0) 2022.02.27