[스프링 배치] 잡(Job)과 스텝(Step)
- Coding/Spring Batch
- 2021. 8. 18.
잡 (Job)
상태를 수집하고 이전 상태에서 다음 상태로 전환된다.
스텝 (Step)
스프링 배치에서 가장 일반적으로 상태를 보여주는 단위이다. 각 스텝은 잡을 구성하는 독립된 작업의 단위이다.
스텝에는 Tasklet, Chunk 기반으로 2가지가 있다.
- 1) Tasklet
package org.springframework.batch.core.step.tasklet;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.lang.Nullable;
/**
* Strategy for processing in a step.
*
* @author Dave Syer
* @author Mahmoud Ben Hassine
*
*/
public interface Tasklet {
/**
* Given the current context in the form of a step contribution, do whatever
* is necessary to process this unit inside a transaction. Implementations
* return {@link RepeatStatus#FINISHED} if finished. If not they return
* {@link RepeatStatus#CONTINUABLE}. On failure throws an exception.
*
* @param contribution mutable state to be passed back to update the current
* step execution
* @param chunkContext attributes shared between invocations but not between
* restarts
* @return an {@link RepeatStatus} indicating whether processing is
* continuable. Returning {@code null} is interpreted as {@link RepeatStatus#FINISHED}
*
* @throws Exception thrown if error occurs during execution.
*/
@Nullable
RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception;
}
- 스텝이 중지될 때까지 execute 메서드가 계속 반복해서 수행된다.
- execute 메서드를 호출할 때마다 독립적인 트랜잭션이 얻어진다.
- 초기화, 저장 프로시저 실행, 알림 전송과 같은 잡에서 일반적으로 사용된다.
- 2) Chunk
- 아이템 기반의 처리에 사용된다.
- 각 Chunk 기반 스텝은 ItemReader, ItemProcessor, ItemWriter 라는 3개의 주요 부분으로 구성될 수 있다.
- ItemProcessor 은 필수가 아니다.
잡(Job) 실행
잡이 실행될 때 스프링 배치의 많은 컴포넌트는 탄력성(resiliency)을 제공하기 위해 서로 상호작용을 한다.
- 1) JobRepository
- 다양한 배치 수행과 관련된 수치 데이터와 잡의 상태를 유지 및 관리한다.
- 일반적으로 관계형 데이터베이스를 사용하며 스프링 배치 내의 대부분의 주요 컴포넌트가 공유한다.
- 실행된 스텝, 현재 상태, 읽은 아이템 및 처리된 아이템 수 등이 모두 JobRepository 에 저장된다.
- 2) JobLauncher
- 잡을 실행하는 역할을 담당한다. Job.execute 을 호출하는 역할이다.
- 잡의 재실행 가능 여부 검증, 잡의 실행 방법, 파라미터 유효성 검증 등을 수행한다.
- 스프링 부트의 환경에서는 부트가 Job을 시작하는 기능을 제공하므로, 일반적으로 직접 다룰 필요가 없는 컴포넌트다.
- 잡을 실행하면 해당 잡은 각 스텝을 실행한다. 각 스텝이 실행되면 JobRepository는 현재 상태로 갱신된다.
잡 또는 스텝 실행 완료
실행 완료시, JobRepository 내에 있는 JobExecution 또는 StepExecution 이 최종 상태로 업데이트 된다.
- JobInstance
스프링 배치 잡의 논리적인 실행이다.
잡을 각 다른 파라미터로 실행될 때마다 새로운 JobInstance 가 생성된다.
JobInstance 는 여러개의 JobExecution 을 가질 수 있다.
* JobInstance 를 얻지 못하는 경우
잡을 처음 실행하면 새로운 JobInstance 및 JobExecution 을 얻게된다.
실행에 실패한 이후 재실행하면, 해당 실행은 여전히 동일한 파라미터로 실행된 잡이므로 새 JobInstance 를 얻지 못한다. 그 대신, 실제 실행을 추적하기 위한 새로운 JobExecution 을 얻게된다.
- JobExecution
스프링 배치 잡(Job)의 실제 실행을 의미한다.
잡을 구동할 때마다 매번 새로운 JobExecution 을 얻게된다.
- StepExecution
스프링 배치 스텝(Step) 의 실제 실행을 의미한다.