- [Spring Batch] 6. JobBuilderFactory, JobBuilder2024년 10월 30일 23시 18분 12초에 업로드 된 글입니다.작성자: nickhealthy
기본 개념
스프링 배치는 Job과 Step을 쉽게 생성 및 설정할 수 있도록 util 성경의 빌더 클래스들을 제공한다.
JobBuilderFactory
- JobBuilder를 생성하는 팩토리 클래스로서 `get(String name)` 메서드를 제공한다.
- `jobBuilderFactory.get("jobName")`에서 jobName은 스프링 배치가 Job을 실행시킬 때 참조하는 Job의 이름이다.
JobBuilder
- Job을 구성하는 설정 조건에 따라 두 개의 하위 빌더 클래스를 생성하고, 실제 Job 생성을 위임한다.
- SimpleJobBuilder
- SimpleJob을 생성하는 Builder 클래스
- Job 실행과 관련된 여러 설정 API를 제공한다.
- FlowJobBuilder
- FlowJob을 생성하는 Builder 클래스
- 내부적으로 FlowBuilder를 반환함으로써 Flow 실행과 관련된 여러 설정 API를 제공한다.
아키텍처
Job을 정의할 때 어떤 API를 사용하느냐에 따라서 JobBuilder 클래스가 생성하는 하위 빌더 클래스가 다르다.
Job의 구현체로는 크게 SimpleJobBuilder, FlowJobBuilder 클래스 2개가 있다.
다음과 같이 3가지 경우로 Job을 정의했을 때 어떤 Builder 클래스를 사용하게 될 지 나뉘게 된다.
- `start()` 메서드의 인자를 Step 타입의 개체로 설정했을 때 즉, `start(step)`의 형식일 때 JobBuilder 클래스 내부적으로 SimpleJobBuilder 클래스가 생성된다. 그리고 SimpleJobBuilder는 SimpleJob을 생성한다.
- `start()` 메서드의 인자를 Flow 타입의 개체로 설정했을 때 즉, `start(flow)`의 형식일 때 JobBuilder 클래스 내부적으로 FlowJobBuilder 클래스가 생성된다. 그리고 FlowJobBuilder는 FlowJob을 생성한다.
- `flow()` 메서드의 인자를 Step 타입의 개체로 설정했을 때 즉, `flow(step)`의 형식일 때 JobBuilder 클래스 내부적으로 FlowJobBuilder 클래스가 생성된다. 그리고 FlowJobBuilder는 FlowJob을 생성한다.
- (FlowJobBuilder 클래스 오른쪽, 번호로 표시 못함) JobFlowBuilder 클래스가 있는데 FlowJobBuilder는 내부적으로 JobFlowBuilder 클래스를 가지고 있고, JobFlowBuilder가 Flow를 생성하게 된다.
또한 네모 박스는 각각의 Builder 마다 사용할 수 있는 API가 다른데, 지금까지의 실습에서는 SimpleJobBuilder 클래스에서 `start(step)`, `next(step)` 이 두개만 사용해 왔었다.
클래스 상속 구조
JobBuilderFactory/JobBuilder의 클래스 상속 구조를 살펴보면서 어떻게 동작하는지 간단하게 알아보자
JobBuilderFactory에서 JobBuilder 클래스를 생성하고 JobBuilde는 JobBuilderHelper를 상속하고 있다.
또한 빨간 박스 안에 있는 CommonJobProperties는 Job을 생성할 때 필요한 공통 속성들을 모아놓은 클래스이다.
SimpleJobRepository는 JobBuilder 내부에 참조하고 있으며, JobBuilder가 생성되는 시점에 JobRepository도 함께 생성된다.
JobBuilder가 사용 API에 따라 SimpleJobBuilder, FlowJobBuilder를 생성 후 SimpleJob, FlowJob을 생성하게 된다면 JobRepository도 함께 전달되어 각각의 Job이 구동될 때 JobReposiroy를 통해서 CRUD 기능을 수행하게 된다.
다음글이 없습니다.이전글이 없습니다.댓글