본문 바로가기
Spring

스프링배치 완벽가이드 - 6장 잡 실행하기

by 밝지 2023. 6. 25.
728x90
반응형

6장 잡 실행하기

from. 스프링 배치 완벽 가이드


 

 

스프링 부트로 배치 잡 시작하기

JobLauncherCommandLineRunner는 스프링 배치의 JobLauncher를 사용해 잡을 실행한다. 스프링 부트가 ApplicationContext 내에 구성된 모든 CommandLineRunner를 실행할 때, 클래스패스에 spring-boot-starter-batch가 존재한다면 JobLauncherCommandLineRunner는 컨텍스트 내에서 찾아낸 모든 잡을 실행한다. 

 

 

쿼츠를 사용해 스케줄링하기

쿼츠는 스케줄러, 잡, 트리거라는 세 가지 주요 컴포넌트를 가진다. 

  • 스케줄러는 JobDetails 및 트리거의 저장소 기능을 한다. 또한 연관된 트리거가 작동할 때 잡을 실행한느 역할을 한다.
  • 잡은 실행할 작업의 단위이다. 
  • 트리거는 작업 실행 시점을 정의한다. 
  • 트리거가 작동되어 쿼츠에게 잡을 실행하도록 지시하면 잡의 개별 실행을 정의하는 JobDetails 객체가 생성된다. 

 

 

잡 중지하기

COMPLETED BatchStatus로 잡이 완료되면 동일한 JobParameter를 사용해 새로운 JobInstance를 다시 생성하 ㄹ수 없다. 이런 특징은 잡 실행 방식에 영향을 주기 때문에 매우 중요하다. (JobParmetersIncrementer를 사용해 잡 실행 시 파라미터를 증가시키거나, 매일 실행하는 잡이 있다면 타임스탬프를 파라미터로 추가하는 JobParametersIncrementer 구현체를 개발한다.)

처리 중에 발생한 어떤 일 때문에 잡을 중지시켜야 할 경우 중지 트랜지션을 활용해 중지할 수 있다.

 

 

잡 실패

잡이 중지되면 현재 청크는 롤백된다. 이는 청크 기반 처리의 주요한 개념 중 하나다. 성공적으로 완료한 작업까지 커밋할 수 있으며, 재 시작 시에는 중단됐던 부분을 찾아낼 수 있다. 스프링 배치는 예외가 발생하면 기본적으로 스텝 및 잡이 실패한 것으로 간주한다. 

 

StepExecution을 사용해 잡을 중지하는 방식과 예외를 발생시켜 잡을 중지하는 방식은 큰 차이가 있다. 차이는 잡의 상태다. StepExecution의 경우 ExitStatus.STOPPED 상태로 스텝이 완료된 후에 잡이 중지되고, 예외가 발생한 경우에는 스텝이 완료되지 않는다. 예외가 던져지면 스텝은 통과하며 스텝과 잡에 ExitStatus.FAILED 레이블이 지정된다.

스텝이 FAILED로 식별되면 스프링 배치는 해당 스텝을 처음부터 다시 시작하지는 않는다. 잡을 재시작하면 스프링 배치는 중단됐던 부분을 가져온다. 

 

 

잡의 재시작 제어하기

  • 잡의 재 시작 방지하기

스프링 배치는 JobBuilder의 preventRestart() 호출해 잡을 다시 시작할 수 없도록 구성하는 기능을 제공한다. transactionJob 잡은 기본적으로 잡의 재시작이 가능하도록 구성되지만 preventRestart() 메서드를 호출한다면 잡이 실패하거나 어떤 이유로든 중지된 경우에 다시 실행할 수 없다. 

  • 재시작 횟수를 제한하도록 구성하기

StepBuilder의 startLimit(숫자) 메서드를 이용해 잡의 실행 횟수를 컨트롤 할 수 있다. 

  • 완료된 스텝 재실행하기

프레임워크의 기본 구성을 재정의함으로써 완료된 스텝을 두 번 이상 실행할 수 있다. StepBuilder의 allowStartIfComplete() 메서드를 사용해 스텝이 잘 완료됐더라도 다시 실행할 수 있어야 한다는걸 프레임워크에 알린다. 

But 잡의 ExitStatus가 COMPLETE라면 모든 스텝에 allowStartIfComplete(true);를 적용해 구성하더라도 이와 관계없이 잡 인스턴스를 다시 실행할 수 없다. 

728x90
반응형