Spring Batch ‐ 스프링 배치 실행 ‐ Flow - thought-corner/Backend-PlayGround GitHub Wiki

FlowJob

  • Step순차적으로만 구성하는 것이 아니라 특정 상태에 따라 흐름을 전환할 수 있도록 구성하며 FlowJobBuilder에 의해 생성된다.
    • Step이 실패해도 Job이 실패로 끝나지 않도록 해야하는 경우
    • Step이 성공했을 때 다음에 실행되어야 할 Step을 구분해서 실행해야하는 경우
    • 특정 Step은 전혀 실행되지 않도록 구성해야하는 경우
  • FlowJob 흐름을 구성하는데만 관여하고 실제 비즈니스 로직은 Step에서만 이루어진다.

Transition

  • BatchStatus : JobExecutionStepExecution 속성으로 JobStep 종료 후 최종 결과 상태가 무엇인지를 정의한다.
  • SimpleJob : 마지막 StepBatchStatus 값이 Job의 최종 BatchStatus로 반영된다.
  • FlowJob : Flow 내 마지막 StepExitStatus 값을 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 어노테이션이다.