반응형

목차

    잡의 재시작 방지

    스프링 배치의 모든 잡은 실패하거나 중지될 때 다시 실행할 수 있었다. 스프링 배치는 기본적으로 이렇게 동작하므로 우리는 다시 실행하면 안되는 잡이 있을시 재시작을 방지해야한다. 

    preventRestart()

    preventRestart() 메서드를 호출하여 잡이 실패하거나 어떤 이유로 중지된 경우에도 다시 실행할 수 없다.

    /**
    * 잡 실행
    * @return
    */
    @Bean
    public Job transactionJob() {
          return this.jobBuilderFactory.get("transactionJob")
          .preventRestart() /* 잡은 기본적으로 재시작이 가능하도록 구성되어있다. 잡의 재시작 방지 */
          .start(...)
          .next(...)
          .build();
      }

    잡의 재시작 횟수 제한

    startLimit(n) : 재시작 횟수를  n번으로 제한한다.

    @Bean
    public Step importTransactionFileStep() {
          return this.stepBuilderFactory.get("importTransactionFileStep")
          .startLimit(2) /* 잡의 재시작 횟수 제한 */
          .<Transaction, Transaction>chunk(100)
          .reader(...)
          .writer(...)
          .listener(...) /* 스텝 빌드하기 전 실행할 리스너 등록 */
          .build();
    }

    완료된 스텝 재실행하기

    allowStartIfComplete(true)

    스텝이 잘 완료됐더라도, 다시 실행할 수 있어야 할때 사용한다. 주의할 점은, 잡의 ExitStatus 가 COMPLETE 라면 모든 스텝에 allowStartIfComplete(true) 를 적용하더라도 이와 관계없이 잡 인스턴스는 다시 실행할 수 없다.

    잡이 재실행될때 무조건 실행되어야할 스텝이 존재할 경우 설정한다.

    @Bean
    public Step importTransactionFileStep() {
          return this.stepBuilderFactory.get("importTransactionFileStep")
          .<Transaction, Transaction>chunk(100)
          .reader(...)
          .writer(...)
          .allowStartIfComplete(true) /* 잡이 재시작될시, 스텝이 다시 실행될 수 있도록 재시작 허용 */
          .listener(...) /* 스텝 빌드하기 전 실행할 리스너 등록 */
          .build();
    }
    반응형

    + Recent posts