SpringBatch : TaskLetStep의 StartLimit

    TaskLetStep의 StartLimit

    TaskLetStep의 StartLimit은 해당 Step이 실행할 수 있는 최대 횟수를 설정하는 것이다. Step은 기본적으로 실패할 경우 다시 실행할 수 있다. 또한 StartAllow 메서드를 이용해서 성공한 Step도 항상 재실행하도록 설정할 수 있다. TaskLetStep의 StartLimit는 이처럼 새로 시작할 수 있는 Step의 최대 실행횟수를 설정하는 것이다. 

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .tasklet((contribution, chunkContext) ->
                {
                    System.out.println(">>> step1 has executed");
                    return RepeatStatus.FINISHED;
                })
                .startLimit(3)
                .build();
    }

    코드는 위와 같은 형식으로 작성한다. 

     

     

    TaskLetStep의 StartLimit 설정 정보 저장

    startLimit를 하게 되면, TaskLetStepBuilder가 가지고 있는 properties의 속성에 설정값을 넣을 수 있게 된다. 이 설정값만큼만 Step이 실행가능한 것을 알 수 있다. 

     

    TaskLetStep의 StartLimit 예제 코드 확인 → StratLimitExceedException 발생

    @Bean
    public Step step2() {
        return stepBuilderFactory.get("step342")
                .tasklet((contribution, chunkContext) ->
                {
                    System.out.println(">>> step2 has executed");
                    throw new RuntimeException("abc");
                })
                .startLimit(2)
                .build();
    }

    다음과 같이 Exception을 발생시키는 예제 코드를 작성해서, 실제 어떻게 동작하는지를 확인해보고자 한다. 고의로 2번의 예외가 발생하고 한 다음에, 세번째 수행했을 때의 DB 스키마를 살펴봤다.

    Step이 실패했기 때문에 Job은 다시 실행이 가능하다. 따라서 2번까지는 RunTimeExeception(의도한 거)이 발생한 것이 확인된다. 그런데 세번째 실행에서는 StartLimitExcceded Exception이 발생한 것을 확인할 수 있다. 

    StepExecution은 Step342에 대해서 총 세번 실행에 대해 2개의 Execution만 생성되었다. 왜냐하면 StartLimit까지만 Step을 실행하기 때문에 세번째 실행 시도는 수행되지 않았기 때문이다. 

    댓글

    Designed by JB FACTORY