Study/Spring Batch
스프링 배치 실행 -FlowJob 개념 및 API
공29
2024. 4. 29. 23:20
1) 기본 개념
- Step 을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder 에 의해 생성된다.
- Step 이 실패 하더라도 Job 은 실패로 끝나지 않도록 해야 하는 경우
- Step 이 성공 했을 때 다음에 실행해야 할 Step 을 구분해서 실행 해야 하는경우
- 특정 Step은 전혀 실행되지 않게 구성 해야 하는 경우
- Flow 와 Job 의 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step 에서 이루어진다
- 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행 시 호출한다
2) SimpleJob vs FlowJob
SimpleJob | FlowJob |
순차적 흐름 | 조건적 흐름 |
![]() |
![]() |
|
|
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) 흐름도
5) FlowBuilder