[스프링 배치] 잡(Job)과 스텝(Step)

반응형
728x90
반응형

잡 (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) 의 실제 실행을 의미한다.

 

 

 

 

 

 

 

반응형

Designed by JB FACTORY