Study/Spring Batch

스프링 배치 실행 -FlowJob 개념 및 API

공29 2024. 4. 29. 23:20

1) 기본 개념

  • Step 을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder 에 의해 생성된다.
    • Step 이 실패 하더라도 Job 은 실패로 끝나지 않도록 해야 하는 경우
    • Step 이 성공 했을 때 다음에 실행해야 할 Step 을 구분해서 실행 해야 하는경우
    • 특정 Step은 전혀 실행되지 않게 구성 해야 하는 경우
  • Flow 와 Job 의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step 에서 이루어진다
  • 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다

 

2) SimpleJob vs FlowJob

SimpleJob FlowJob
순차적 흐름 조건적 흐름
  • Step A  가장 먼저 실행
  • Step A  실패 하면 전체 Job  실패
  • Step B  Step C  실행 되지 않음
  • Step A  가장 먼저 실행
  • Step A  성공 하면 Flow  실행
  • Step A  실패 하면 Step B  실행
  • 성공/실패 모두 Job  성공함

 

3) JobBuilderFactory > JobBuilder > JobFlowBuilder > FlowBuilder  > FlowJob

@Bean
public Job batchJob() {
    return jobBuilderFactory.get("batchJob")
            .start(step1()) // Flow 시작하는 Step 설정
            .on("COMPLETED") // Step의 실행 결과로 돌려받는 종료 상태 (ExitStatus)를 캐치하여 매칭하는 패턴, TransitionBuilder 반환
            .to(step2()) // 다음으로 이동할 Step 지정 .stop()/fail()/end()/stopAndRestart() -> Flow를 중지/실패/종료 하도록 Flow 종료
            // => Step1이 성공하면 Step2로 가라.
            .from(step1()) // 이전 단계에서 정의한 Step 의 Flow 를 추가적으로 정의함
            .on("FAILED").to(step3()) // => Step1이 실패하면 Step3로 가라.
            //.next(step2()) // 다음으로 이동할 Step 지정
            .end() // build() 앞에 위치하면 FlowBuilder 를 종료하고 SimpleFlow 객체 생성
            .build(); // FlowJob 생성하고 flow 필드에 SimpleFlow 저장
}
  • start(Step), from(Step), next(Step)
    • Flow : 흐름을 정의하는 역할
  • on(String pattern), to(Step), stop(), fail(), end(), stopAndRestart()
    • Transition : 조건에 따라 흐름을 전환시키는 역할

 

4) 흐름도

단순한 Step 으로 생성하는 SimpJob 보다 다양한 Flow 로 구성하는 FlowJob 의 생성 구조가 더 복잡하고 많은 API 를 제공한다.

 

5) FlowBuilder

FlowBuilder 의 on(String pattern) 메서드를 호출하게 되면 TransitionBuilder 가 작동하게 되면서 Step 간 조건부 전환을 구성할 수 있게 된다.