개요
Job의 구현체는 아래와 같이 두 가지가 존재합니다.
- SimpleJob
- FlowJob
SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300에서 다루었고 이번 게시글에서는 FlowJob 아키텍처를 간단히 정리해보겠습니다.
FlowJob의 흐름
1. 처음에는 SimpleJob과 동일하게 시작합니다.
- JobParameters와 함께 JobLauncher가 JobInstance를 생성
- JobInstance가 실행될 때마다 JobExecution이 생성
- 배치 상태를 STARTED로 업데이트
2. FlowJob이 실행되기 전에 등록된 JobListener의 beforeJob() 메서드가 호출됩니다.
- SimpleJob, FlowJob 모두 AbstractJob을 상속하므로 2번까지의 과정은 SimpleJob과 동일
3. FlowJob이 실행은 FlowExecutor에 의해 진행되며 FlowExecutor는 다음에 내용을 정리해 볼 SimpleFlow를 실행합니다.
- 이 과정에서 Flow를 실행하면서 발생하는 메타데이터를 지니는 flow 실행 객체인 FlowExecution이 생성
- FlowJob 클래스 내 doExecute() 메서드에서 확인 가능
4. SimpleFlow는 State 내 구성된 step, flow, 그리고 decider를 지니고 있고 각각의 항목들을 실행합니다.
- 이때 실행된 결과를 FlowExecutionStatus에 업데이트하고 이 값을 FlowExecution에도 업데이트
- BatchStatus와 ExitStatus는 Job과 Step이 갖는 상태 값
- FlowExecutionStatus는 Flow가 갖는 상태 값
- Flow가 Flow를 가질 수 있으므로 중첩이 가능한 구조
- SimpleFlow 클래스 내 resume() 메서드를 보면 stateMap을 통해 어떤 항목을 실행할지 판단하는 것을 확인할 수 있음
5. SimpleFlow 실행이 완료되면 등록된 JobListener의 afterJob() 메서드가 호출됩니다.
6. JobExecution을 마지막 FlowExecutionStatus과 동일하게 업데이트
- FlowJob 클래스의 doExecute() 메서드를 보면 확인할 수 있음
위 내용을 정리한 그림
출처
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch (정수원 강사님)
반응형
'Spring' 카테고리의 다른 글
[Spring Batch] @JobScope,@StepScope (0) | 2023.07.19 |
---|---|
[Spring Batch] SimpleFlow 아키텍처 (0) | 2023.07.17 |
[Spring Batch] TaskletStep 아키텍처 (0) | 2023.07.11 |
[Spring Batch] SimpleJob 아키텍처 (0) | 2023.07.10 |
[Spring Batch] 스프링 배치 도메인 정리 (0) | 2023.07.06 |