ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 배치 실행 -FlowJob 개념 및 API
    Study/Spring Batch 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 간 조건부 전환을 구성할 수 있게 된다.

     

    댓글

Designed by Tistory.