본문 바로가기
공부/스프링 배치

스프링배치 - Flow

by 띵커베르 2023. 4. 13.
728x90
  • FlowJob 기본개념
    • Step 을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder 에 의해 생성된다.
      • Step 이 실패 하더라도 Job 은 실패로 끝나지 않도록 해야 하는 경우
      • Step 이 성공 했을 때 다음에 실행해야 할 Step 을 구분해서 실행 해야 하는 경우
      • 특정 Step 은 전혀 실행되지 않게 구성 해야 하는 경우
    • Flow 와 Job 의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step 에서 이루어진다.
    • 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다.
  • 배치 상태 유형
    • BatchStatus
      • JobExecution 과 StepExeccution 의 속성으로 Job 과 Step 의 종료 후 최종 결과 상태가 무엇인지 정의
      • SimpleJob
        • 마지막 Step 의 BatchStatus 값을 Job 의 최종 BatchStatus 값으로 반영
        • Step 이 실패할 경우 해당 Step 이 마지막 Step 이 된다.
      • FlowJob
        • Flow 내 Step 의 ExitStatus 값을 FlowExecutionStatus 값으로 저장
        • 마지막 Flow 의 FlowExecutionStatus 값을 Job 의 최종 BatchStatus 값으로 반영
      • COMPLETED, STARTING, STARTED, STOPPING, STOOPPED, FAILED, ABANDONED, UNKNOWN
    • ExitStatus
      • JobExecution 과 StepExecution 의 속성으로 Job 과 Step 의 실행 후 어떤 상태로 종료되었는지 정의
      • 기본적으로 ExitStatus 는 BatchStatus 와 동일한 값으로 설정된다.
      • SimpleJob
        • 마지막 Step 의 ExitStatus 값을 Job 의 최종 ExitStatus 값으로 저장
        • 마지막 Flow 의 FlowExecutionStatus 값을 Job 의 최종 ExitStatus 값으로 반영
      • UNKNOWN, EXECUTING, COMPLETED, NOOP, FAILD, STOPPED
      • exitCode 속성으로 참조
    • FlowExecutionStatus
      • FlowExecution 의 속성으로 Flow 의 실행 후 최종 결과 상태가 무엇인지 정의
      • Flow 내 Step 이 실행되고 나서 ExitStatus 값을 FlowExecutionStatus 값으로 저장
      • FlowJob 의 배치 결과 상태에 관여함
      • COMPLETED, STOPPED, FAILED, UNKNOWN
    • Transition 기본 개념
      • Flow 내 Step 의 조건부 전환(전이)을 정의함
      • Job 의 API 설정에서 on(String pattern) 메서드를 호출하면 TrasitionBuilder 가 반환되어 trasition Flow 를 구성할 수 있음
      • Step 의 종료상태(ExitStatus) 가 어떤 pattern 과도 매칭되지 않으면 스프링 배치에서 예외를 발생하고 Job 은 실패
      • trasition 은 구체적인 것부터 그렇지 않은 순서로 적용된다.
    • API
      • on(String pattern)
        • Step 의 실행 결과로 돌려받는 종료상태(ExitStatus)와 매칭하는 패턴 스키마, BatchStatus 와 매칭하는 것이 아님
        • pattern 과 ExitStatus 와 매칭이 되면 다음으로 실행할 Step 을 지정할 수 있다.
        • 특수문자는 두 가지만 허용
          • "*": 0개 이상의 문자와 매칭, 모든 ExitStatus 와 매칭된다.
          • "?": 정확히 1개의 문자와 매칭
          • ex) "c*t" 는 "cat" 과 "count" 에 매칭되고, "c?t" 는 "cat"에만 매칭된다.
      • to()
        • 다음으로 실행할 단계를 지정
      • from()
        • 이전 단계에서 정의한 Trasition 을 새롭게 추가 정의함
    • Job 을 중단하거나 종료하는 Trasition API
      • Flow 가 실행되면 FlowExecutionStatus 에 상태값이 저장되고 최종적으로 Job 의 BatchStatus 와 ExitStatus 에 반영된다.
      • Step 의 BatchStatus 및 ExitStatus 에는 아무런 영향을 주지 않고 Job 의 상태만을 변경한다.
      • stop()
        • FlowExecutionStatus 가 STOPPED 상태로 종료되는 tarnsition
        • Job 의 BatchStatus 와 ExitStatus 가 STOPPED 로 종료됨
      • fail()
        • FLowExecutionStatus 가 FAILED 상태로 종료되는 trasition
        • Job 의 BatchStatus 와 ExitStatus 가 FAILED 로 종료됨
      • end()
        • FlowExecutionStatus 가 COMPLETED 상태로 종료되는 transition
        • Job 의 BatchStatus 와 ExitStatus 가 COMPLETED 로 종료됨
        • Step 의 ExitStatus 가 FAILED 이더라도 Job 의 BatchStatus 가 COMPLETED 로 종료하도록 가능하며 이 떄 Job 의 재시작은 불가능 하다
      • stopAndReStart(Step or Flow or JobExecutionDecider)
        • stop() transition 과 기본 흐름은 동일
        • 특정 step 에서 작업을 중단하도록 설정하면 중단 이전의 Step 만 COMPLETED 저장되고 이후의 step 은 실행되지 않고 STOPPED 상태로 Job 종료
        • Job 이 다시 실행됐을 때 실행해야 할 step 을 restart 인자로 넘기면 이전에 COMPLETED 로 저장된 step 은 건너뛰고 중단 이후 step 부터 시작한다.
    • ExitStatus 기본개념
      • ExitStatus 에 존재하지 않는 exitCode 를 새롭게 정의해서 설정
      • StepExecutionListener 의 afterStep() 메서드에서 Custom exitCode 생성 후 새로운 ExitStatus 반환
      • Step 실행 후 완료 시점에서 현재 exitCode 를 사용자 정의 exitCode 로 수정할 수 있음
    • JobExecutionDecider 기본개념
      • ExitStatus 를 조작하거나 StepExecutionListener 를 등록할 필요없이 Trasition 처리를 위한 전용 클래스
      • Step 과 Transition 역할을 명확하게 분리해서 설정 할 수 있음
      • Step 의 ExitStatus 가 아닌 JobExecutionDecider 의 FlowExecutionStatus 상태값을 새롭게 설정해서 반환함
    •  
728x90

'공부 > 스프링 배치' 카테고리의 다른 글

스프링 배치 - Step  (0) 2023.04.13
스프링 배치 - Job  (0) 2023.04.12
스프링 배치 실행 - JobBuilderFactory, JobBuilder  (0) 2023.04.12
스프링배치 도메인  (0) 2023.04.10
스프링배치 - 테이블  (0) 2023.04.10

댓글