[스프링 배치] 잡의 재시작 방지/재시작 횟수제한/재실행 설정 방법

반응형
728x90
반응형

잡의 재시작 방지

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

 

  • 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();
}

 

 

반응형

Designed by JB FACTORY