Spring Batch : Simple Job의 preventRestart()

    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

    위의 의문은 SimpleJobLauncher에서 확인할 수 있다. 위 클래스에서는 Job을 실행하기 전에 마지막으로 실행된 JobExecution이 있는지 확인한다. 마지막 실행한 JobExecution이 있다면 이 때, restarable의 값이 False인지 확인한다. 만약 False라면 Exception을 발생시키면서 Job이 실행되지 못하도록 막아준다.

     


    preverntRestart 설정 시, 어떤 예외 발생하는지?

    한번 실패한 Job에 prevetnRestart가 설정되어 있는 경우를 고려해보자. 이 때 Job을 다시 실행하려고 하면, 위의 코드에서 확인할 수 있듯이 JobRestartException이 발생하고 Job은 실행되지 않는다. 또한, Job이 실행되지 않았기 때문에 JobExecution 등도 새로 생성되지 않는다.

     

    댓글

    Designed by JB FACTORY