728x90
- FlowJob 기본개념
- Step 을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder 에 의해 생성된다.
- Step 이 실패 하더라도 Job 은 실패로 끝나지 않도록 해야 하는 경우
- Step 이 성공 했을 때 다음에 실행해야 할 Step 을 구분해서 실행 해야 하는 경우
- 특정 Step 은 전혀 실행되지 않게 구성 해야 하는 경우
- Flow 와 Job 의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step 에서 이루어진다.
- 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다.
- Step 을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder 에 의해 생성된다.
- 배치 상태 유형
- 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 을 새롭게 추가 정의함
- on(String pattern)
- 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 상태값을 새롭게 설정해서 반환함
- BatchStatus
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 |
댓글