Spring Batch ‐ 스프링 배치 실행 ‐ Flow - thought-corner/Backend-PlayGround GitHub Wiki
FlowJob
Step을 순차적으로만 구성하는 것이 아니라 특정 상태에 따라 흐름을 전환할 수 있도록 구성하며FlowJobBuilder에 의해 생성된다.Step이 실패해도Job이 실패로 끝나지 않도록 해야하는 경우Step이 성공했을 때 다음에 실행되어야 할Step을 구분해서 실행해야하는 경우- 특정
Step은 전혀 실행되지 않도록 구성해야하는 경우
Flow와Job흐름을 구성하는데만 관여하고 실제 비즈니스 로직은Step에서만 이루어진다.
Transition
BatchStatus:JobExecution과StepExecution속성으로Job과Step종료 후 최종 결과 상태가 무엇인지를 정의한다.SimpleJob: 마지막Step의BatchStatus값이Job의 최종BatchStatus로 반영된다.FlowJob:Flow내 마지막Step의ExitStatus값을FlowExecutionStatus값으로 저장한다.
SimpleFlow
- 스프링 배치에서 제공하는
Flow의 구현체로서 각 요소들을 담고 있는State를 실행시키는 도메인 객체 FlowBuilder를 사용해서 생성하며Transition과 조합하여 여러 개의Flow및 중첩Flow를 만들어Job을 구성할 수 있다.
@JobScope 어노테이션 & @StepScope 어노테이션⭐
Scope: 스프링 컨테이너에서 빈이 관리되는 범위- singleton, prototype, request, session, application이 있으며 기본적으로는 singleton으로 생성된다.
1. @JobScope
- Job 빈 생성과 실행에 관여하는 스코프
- 프록시 모드를 기본값으로 하는 스코프
- 해당 스코프가 선언되면 빈 생성이 애플리케이션 구동 시점이 아니라 실행 시점에 이루어진다.
- 프록시 모드로 빈이 선언되기 때문에 애플리케이션 구동 시점에는 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호출한다.
- 병렬처리 시 각 쓰레드마다 생성된 스코프 빈이 할당되기 때문에 쓰레드에 안전하게 실행이 가능하다.
2. @StepScope
- Step 빈 생성과 실행에 관여하는 스코프
- 프록시 모드를 기본값으로 하는 스코프
- 해당 스코프가 선언되면 빈 생성이 애플리케이션 구동 시점이 아니라 실행 시점에 이루어진다.
- 프록시 모드로 빈이 선언되기 때문에 애플리케이션 구동 시점에는 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호출한다.
- 병렬처리 시 각 쓰레드마다 생성된 스코프 빈이 할당되기 때문에 쓰레드에 안전하게 실행이 가능하다.
- 기본적으로 Spring Bean으로 등록한 대상들은 서버 구동과 동시에 스프링의 관리 대상이 된다.
JobParameters의 경우 앱이 켜질 때 만들지 말고 파라미터가 들어올 때까지 기다리라고 스프링에게 알려줘야하는데 이 개념을 지연된 빈 생성(Lazy Bean Creation)이라고 한다. 이 역할을 해주는 것이 바로@JobScope와@StepScope어노테이션이다.