Simple Job의 PreventRestart
Simple Job은 실패한 JobInstance만 다시 실행할 수 있다. 그렇지만 이렇게 실패한 JobInstance가 다시 실행되는 것을 막는 방법이 있다. 바로 preventRestart 메서드를 이용하면 된다.
jobBuilderFactory.get("batchjob2")
.start(step1())
.next(step2())
.next(step3())
.preventRestart()
.build();
사용은 다음과 같이 Job을 만들 때, preventRestart 메서드를 넣어주는 것으로 설정이 가능하다.
preverntRestart와 개념도
먼저 preventRestart를 설정하면 어떻게 동작하는지를 코드 단위로 좀 더 쪼개서 보려고 한다.
preventRestart를 확인하면 다음과 같이 properties.restarable이라는 속성에 false라는 값이 설정된다. 이 properties 속성은 JobBuilderHelper에 속한 CommonJobProperties 객체다.
CommonJobProperties 객체가 가지는 restartable 필드의 초기값은 True다. preventRestart() 메서드를 사용하면 이렇게 properties의 기본값 true를 False로 바꿔주게 된다. 그러면 이렇게 restartable의 값이 true → false로 바뀌게 되면 어떤 일이 발생할까?
위의 의문은 SimpleJobLauncher에서 확인할 수 있다. 위 클래스에서는 Job을 실행하기 전에 마지막으로 실행된 JobExecution이 있는지 확인한다. 마지막 실행한 JobExecution이 있다면 이 때, restarable의 값이 False인지 확인한다. 만약 False라면 Exception을 발생시키면서 Job이 실행되지 못하도록 막아준다.
preverntRestart 설정 시, 어떤 예외 발생하는지?
한번 실패한 Job에 prevetnRestart가 설정되어 있는 경우를 고려해보자. 이 때 Job을 다시 실행하려고 하면, 위의 코드에서 확인할 수 있듯이 JobRestartException이 발생하고 Job은 실행되지 않는다. 또한, Job이 실행되지 않았기 때문에 JobExecution 등도 새로 생성되지 않는다.
'Spring > Spring Batch' 카테고리의 다른 글
Spring Batch : SImpleJob Incrementer 관련 (0) | 2022.03.05 |
---|---|
Spring Batch : SimpleJob의 구조도 (0) | 2022.03.05 |
Spring Batch : SimpleJob의 Validator (0) | 2022.03.05 |
Spring Batch : Simple Job의 Start / Next (0) | 2022.03.05 |
Spring Batch : DB 스키마 Domain 정보 (0) | 2022.03.04 |