[스프링 배치] 잡의 종료 상태 설정 방법

반응형
728x90
반응형

잡의 종료 상태

스프링 배치의 잡은 종료 상태를 가진다. 잡 실행시 갖게되는 JobInstance 는 성공적으로 완료되면 두번 이상 실행될 수 없다. 이는 잡 이름과 파라미터로 식별된다. 만일 사용자가 프로그래밍 방식으로 잡을 종료한다면, 잡의 종료 상태를 알고 그에 따라 분기할 수 있어야한다. 잡의 종료 상태는 3가지이다.

 

1) Completed (완료)
2) Fail (실패)
3) Stopped (중지)

 

스프링 배치가 JobRepository 에 저장할 BatchStatus를 판별할때 스쳅의 ExitStatus 를 평가한다. ExitStatus 는 스텝, 청크, 잡에서 반환될 수 있다. BatchStatus 는 JobExecution 또는 StepExecution 내에 보관되고, JobRepository 에 저장된다. 

 

 

 

Completed (완료)

스프링 배치가 성공적으로 종료되었다. Completed 상태로 종료되면 동일한 파라미터로 다시 실행할 수 없다.

 

@Bean
public Job job() {
      return this.jobBuilderFactory.get("conditionalJob")
                                    .start(firstStep())
                                    .on("FAILED").end()
                                    ....
                                    .end()
                                    .build();
}

 

이때 BATCH_STEP_EXECUTION 테이블에 스텝이 반환한 EXIT_STATUS 가 반환된다. 스텝이 반환한 상태가 무엇인지 상관없이 BATCH_JOB_EXECUTION 에 COMPLETED 가 저장된다.

 

 

 

Failed (실패)

잡이 성공적으로 완료되지 않았음을 의미한다. 동일한 파라미터로 다시 실행할 수 있다.

 

@Bean
public Job job() {
      return this.jobBuilderFactory.get("conditionalJob")
                                    .start(firstStep())
                                    .on("FAILED").fail()
                                    ...
                                    .end()
                                    .build();
}

 

end 메서드 대신 fail 메서드를 사용한다.

 

 

 

Stopped (중지)

Stopped 상태로 종료된 잡은 다시 시작할 수 있다. 잡에 오류가 발생하지 않았지만 중단된 위치에서 잡을 다시 시작할 수 있기 때문이다.

 

@Bean
public Job job() {
      return this.jobBuilderFactory.get("conditionalJob")
                                    .start(firstStep())
                                    .on("FAILED").stopAndRestart(successStep())
                                    ...
                                    .end()
                                    .build();
}

 

FAILD 상태로 로 잡이 종료되지만, 잡을 재실행하면 처음 스텝이 아닌 successStep 에서 부터 실행된다.

 

 

반응형

Designed by JB FACTORY