Java/Spring

스프링 배치 이해하기

태감새 2023. 4. 18. 17:43

Batch

시작과 종료가 있고, 특정 시간에 일련의 작업이 순서대로 진행되는 프로그램

Spring Batch의 기본 구성

기본 구성

Job

배치의 기본적인 단위

Step

Job을 구성하는 배치 작업의 순차적이고 독립적인 단위

예시

JOB: "아침 루틴을 수행한다."
Step 1: "일어나서 입 헹구고 물 한잔 마신다."  
Step 2: "이불 정리한다."  
Step 3: "아침을 먹는다." 
Step 4: "커피를 마신다."

Tasklet vs Chunk

tasklet vd chunk

스프링 배치를 처리하는 대표적인 방식들

Tasklet

간단한 실행 처리시 사용

@FunctionalInterface
public interface Tasklet {
    @Nullable
    RepeatStatus execute (StepContribution contribution, ChunkContext chunkContext) throw Exception;
}

execute() 구현해서 로직 설정

Chunk

아이템 기반으로 나눠서 로직을 수행 or 복잡한 실행

  • ItemReader
    • 한 번에 하나씩 입력을 나타내는 인터페이스
  • ItemProcessor
    • 아이쳄에 대한 비지니스 처리를 나타내는 인터페이스
  • ItemWrite
    • 스텝에서 출력을 나타내는 인터페이스

코드 예시

@Configuration
@RequiredArgsConstructor
pulbic class Test {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job batchJob() {
        return jobBuilderFactory.get("batchJob")
                .start(step1())
                    .on("FAILED")
                    .to(step2())
                    .on("FAILED")
                    .stop()
                .from(step1())
                    .on("*")
                    .to(step3())
                    .next(step4())
                .from(step2())
                    .on("*")
                    .to(step5())
                    .end()
                .build()
    }

    // ex
    private Step step1() {
        return stepBuilderFactory.get("step1")
                .tasklet((contribution, chunkContext) -> {
                    // 필요 로직
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
}

Job 메서드 설명

  • start(Step) : 시작 스텝 입력
  • 분기
    • on(String) : 실행 결과를 받아서 매칭되면 분기처리. TransitionBuilder 반환
      • to(Step) : on(String)에서 분기된 로직의 스텝
      • stop(), fail(), end() : flow 중지, 실패, 종료. FlowBuilder반환
  • from(Step) : 이전 단계에서 정의한 flow 불러오기
  • next(Step) : 다음에 실행 할 스텝
  • end() : FlowBuilder를 종료하고 SimpleFlow객체 생성

Step 메서드 설명 (Tasklet)

  • get(String) : StepBuilder의 이름을 정하고 StepBuilder객체 반환
  • tasklet() : execute() 구현. TaskletBuilder 객체 반환
  • build() : TaskletStep 객체 반환

참고

기본 개념
배치 Flow

'Java > Spring' 카테고리의 다른 글

SpringMVC (2) - Servlet Container와 Spring Container  (0) 2023.04.20
SpringMVC (1) - WAS와 WebServer  (0) 2023.04.19
애너테이션  (0) 2023.02.05
스프링 컨테이너  (0) 2023.02.05
Spring MVC  (0) 2023.02.04