Spring

[Spring Batch] FlowJob 아키텍처

꾸준함. 2023. 7. 11. 23:20

개요

Job의 구현체는 아래와 같이 두 가지가 존재합니다.

  • SimpleJob
  • FlowJob

 

SimpleJob 아키텍처는 https://jaimemin.tistory.com/2300에서 다루었고 이번 게시글에서는 FlowJob 아키텍처를 간단히 정리해보겠습니다.

 

[Spring Batch] SimpleJob 아키텍처

SimpleJob 간략 흐름 SimpleJob을 실행하면 Job->Step->Tasklet 순서로 실행이 되고 각 과정마다 메타데이터가 생성되어 DB에 저장이 됩니다. SimpleJob 아키텍처 1. JobLauncher가 JobParameters를 받고 JobInstance 신규

jaimemin.tistory.com

 

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() 메서드에서 확인 가능

 

FlowJob > doExecute()

 

4. SimpleFlow는 State 내 구성된 step, flow, 그리고 decider를 지니고 있고 각각의 항목들을 실행합니다.

  • 이때 실행된 결과를 FlowExecutionStatus에 업데이트하고 이 값을 FlowExecution에도 업데이트
  • BatchStatus와 ExitStatus는 Job과 Step이 갖는 상태 값
  • FlowExecutionStatus는 Flow가 갖는 상태 값
  • Flow가 Flow를 가질 수 있으므로 중첩이 가능한 구조
  • SimpleFlow 클래스 내 resume() 메서드를 보면 stateMap을 통해 어떤 항목을 실행할지 판단하는 것을 확인할 수 있음

 

SimpleFlow > resume()

 

5. SimpleFlow 실행이 완료되면 등록된 JobListener의 afterJob() 메서드가 호출됩니다.

 

6. JobExecution을 마지막 FlowExecutionStatus과 동일하게 업데이트

  • FlowJob 클래스의 doExecute() 메서드를 보면 확인할 수 있음

 

FlowJob > doExecute()

 

위 내용을 정리한 그림

 

출처

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch (정수원 강사님)

반응형