Spring Batch ‐ 스프링 배치 실행 ‐ Flow - dnwls16071/Backend_Summary GitHub Wiki

📚 FlowJob

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

📚 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으로 생성된다.

[@JobScope]

  • Job 빈 생성과 실행에 관여하는 스코프
  • 프록시 모드를 기본값으로 하는 스코프
  • 해당 스코프가 선언되면 빈 생성이 애플리케이션 구동 시점이 아니라 실행 시점에 이루어진다.
  • 프록시 모드로 빈이 선언되기 때문에 애플리케이션 구동 시점에는 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호출한다.
  • 병렬처리 시 각 쓰레드마다 생성된 스코프 빈이 할당되기 때문에 쓰레드에 안전하게 실행이 가능하다.

[@StepScope]

  • Step 빈 생성과 실행에 관여하는 스코프
  • 프록시 모드를 기본값으로 하는 스코프
  • 해당 스코프가 선언되면 빈 생성이 애플리케이션 구동 시점이 아니라 실행 시점에 이루어진다.
  • 프록시 모드로 빈이 선언되기 때문에 애플리케이션 구동 시점에는 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호출한다.
  • 병렬처리 시 각 쓰레드마다 생성된 스코프 빈이 할당되기 때문에 쓰레드에 안전하게 실행이 가능하다.