[스프링 배치] 잡의 종료 상태 설정 방법
- Coding/Spring Batch
- 2021. 9. 20.
잡의 종료 상태
스프링 배치의 잡은 종료 상태를 가진다. 잡 실행시 갖게되는 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 에서 부터 실행된다.
'Coding > Spring Batch' 카테고리의 다른 글
[스프링 배치] 쿼츠 Quartz 사용하여 배치 스케줄링 (0) | 2021.09.22 |
---|---|
[스프링 배치] JobLauncherCommandLineRunner 모든 잡 실행 설정 제거 (0) | 2021.09.20 |
[스프링 배치] 배치 잡의 세션 ExecutionContext (0) | 2021.09.20 |
[스프링 배치] 잡 리스너의 적용 (0) | 2021.09.20 |
[스프링 배치] 잡 파라미터 접근 ChunkContext (0) | 2021.09.20 |