본문 바로가기
잡다구리

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

by Growing! 2021. 5. 9.

잡 실행하기

스프링 부트로 잡 실행하기

  • 스프링 부트를 사용해서 스프링 배치를 실행할 때는 ApplicationRunner의 구현체인 JobLauncherCommandLineRunner가 사용된다.
    • ApplicationRunner 인터페이스는 스프링 ApplicationContext가 준비되면 호출되는 run() 메소드를 하나 가지고 있다.
    • 스프링 부트는 기동시 spring-boot-starter-batch가 클래스 패스에 존재하면 JobLauncherCommandLineRunner를 실행한다.
    • JobLauncherCommandLineRunner는 JobLauncher를 사용해 컨텍스트 내에서 찾아낸 모든 잡을 실행한다.
  • 애플리케이션 기동시 어떤 잡도 실행하지 않도록 설정할 수 있다.
    • REST 호출이나 특정한 이벤트가 발생했을 때 잡을 실행하려는 경우에 사용하면 된다.
    • "spring.batch.job.enabled" 프로퍼티를 false로 지정하면 된다. default는 true이다.
// spring yaml
spring.batch.job.enabled: false

// spring application
public static void main(String[] args) {
    SpringApplication application = new SpringApplication(...);
    
    Properties properties = new Properties();
    properties.put("spring.batch.job.enabled", false);
    application.setDefaultProperties(properties);
    
    application.run(args);
}
  • 컨텍스트에 여러 잡이 정의되어 있는 상황에서, 기동 시에 특정한 잡만 실행하도록 설정할 수 있다.
    • "spring.batch.job.names" 프로퍼티에 잡 목록을 "," 구분자로 나열하면 된다.
    • "spring.batch.job.names" 프로퍼티가 존재하지 않으면 모든 잡을 실행해 버리기 때문에 주의한다.

REST 방식으로 잡 실행하기

  • REST API에서 특정한 Job을 실행하도록 할 수 있다.
  • Spring Controller에서 JobLauncher의 인스턴스를 얻어 job을 실행하는 방식이다.
  • 일반적으로 Job은 시간이 오래 걸리기 때문에 API가 실행되는 스레드와는 다른 스레드에서 Job을 실행하도록 TaskExecutor를 설정해 주어야 한다.
  • 관련 내용과 예제는 p.207~214를 참고하자.

Quartz로 스케줄링하기

잡 중지하기

 

 

정상적인 종료

 

 

프로그래밍적으로 중지하기

 

 

Stop Transition 사용하기

 

 

 

StepExecution을 사용해 중지하기

 

 

 

오류 처리하기

 

 

잡 실패

 

 

 

재시작 제어하기 (Controlling Restart)

 

 

잡의 재시작 방지하기

 

 

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

 

 

 

완료된 스텝 재실행하기

 

 

 

 

 

 

 

 

 

댓글