기본 개념
- 배치 계층 구조에서 가장 상위에 있는 개념으로서 하나의 배치작업 자체를 의미
- Job Configuration을 통해 생성되는 객체 단위로서 배치작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해 놓은 객체
- 배치 Job을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체를 제공한다.
- 여러 Step을 포함하고 있는 컨테이너로 반드시 한 개 이상의 Step으로 구성해야 함
기본 구현체
- SimpleJob
- 순차적으로 Step을 실행시키는 Job
- FlowJob
- 특정한 조건과 흐름에 따라 Step을 구성하여 실행시키는 Job
- Flow 객체를 실행시켜서 작업을 한다.
쉽게 말해 Job은 하나의 배치 작업 단위이다.
그렇다면 Job은 어떻게 각각의 Step을 실행시키는가?
간단한 JonConfiguration을 만들었다.
스프링을 실행하면 가장 먼저 start()로 선언한 step1()이 실행된다.
package com.study.inflearn.infrastructure.job;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@RequiredArgsConstructor
public class JobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job job() {
return jobBuilderFactory.get("JOB")
.start(step1())
.next(step2())
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("STEP_1")
.tasklet((contribution, chunkContext) -> {
System.out.println("Step1 was executed");
return RepeatStatus.FINISHED;
}).build();
}
@Bean
public Step step2() {
return stepBuilderFactory.get("STEP_2")
.tasklet((contribution, chunkContext) -> {
System.out.println("Step2 was executed");
return RepeatStatus.FINISHED;
}).build();
}
}
start()의 내부로 들어가면, start()는 Step을 파라미터로 받아서, SimpleJobBuilder를 실행한다.
SimpleJobBuilder는 내부적으로 List<Step> 을 구현하고 있고, 여기에 파라미터로 받은 Step을 담는다.
다음으로, next()의 내부로 들어가면, next()도 start()와 마찬가지로 Step을 파라미터로 받아서 SimpleJobBuilder의 List<Steps>에 값을 추가한다.
그럼 이제 마지막에 build()를 수행하면서 Step들이 SimpleJob에 담긴다.
그럼 이제 Job을 수행하기 위해 BatchAutoConfiguration의 JobLauncherApplicationRunner를 생성하고 부른다.
그럼 이제 최종적으로 SimpleJob에 doExecute라는 메서드가 호출되어서 Step을 실행한다.
doExecute에서 handleStep()이라는 함수로 Step을 실행시킨다.
'Spring Batch' 카테고리의 다른 글
2 - Spring Batch DB 스키마 살펴보기 (0) | 2021.11.05 |
---|---|
1 - @EnableBatchProcessing (0) | 2021.11.03 |
댓글