728x90
반응형
1. JobBuilder
- Job과 Step을 쉽게 생성/설정할 수 있도록 util 성격의 빌더 클래스
JobBuilderFactory
- JobBuilder를 생성하는 팩토리 클래스 - get(name: String)
- jobBuilderFactory.get("jobName")
- "jobName"은 스프링 배치가 Job을 실행시킬 때 참조하는 Job의 이름
- 메타 테이블에 해당 이름으로 Job이 관리됨
JobBuilder
- Job 구성 설정 조건에 따라 두 개의 하위 빌더 클래스를 생성하고 실제 Job생성을 위임함
- SimpleJobBuilder
- SimpleJob을 생성하는 Builder 클래스
- FlowJobBuilder
- FlowJob을 생성하는 Builder 클래스
2. SimpleJob
- Step을 실행시키는 Job 구현체
- SimpleJobBuilder에 의해 생성
- 여러 단계의 Step으로 구성될 수 있으며, Step을 순차적으로 실행시킴
- 모든 Step의 실행이 성공해야 Job이 성공적으로 완료된다.
- 맨 마지막에 실행한 Step의 BatchStatus가 Job의 최종 BatchStatus가 된다.
fun job(): Job {
return jobBuilderFactory.get("sampleJob") // JobBuilder 생성
.start(step1()) // 처음 실행할 Step 설정, SimpleJobBuilder 반환
.next(step2())
.incrementor(jobParameterIncrementer)
.validator(jobParameterValidator()) // JobParameter를 실행하기전 검증
.listener(jobExecutionListener()) // Job 라이프사이클 콜백
.build() // SimlpeJob 생성
}
validator()
- Job 실행에 꼭 필요한 파라미터를 검증하는 용도
- DefaultJobParameterValidator를 제공하며 복잡한 제약조건은 JobParameterValidator를 구현하여 사용
- Job실행시점에 JobParameters를 매개변수로 받아 검증
3. StepBuilder
StepBuilderFactory
- StepBuilder 생성하는 팩토리 클래스 - get(name: String)
- StepBuilderFactory.get("stepName")
- "stepName"으로 Step 생성
StepBuilder
- Step 구성 설정 조건에 따라 다섯 개의 하위 빌더 클래스를 생성하고 실제 Step생성을 위임함
- TaskletStepBuilder
- Tasklet 생성 (Tasklet 구현체를 실행)
- tasklet(taslket)
- SimpleStepBuilder
- Tasklet 생성, 내부적으로 청크기반의 작업을 처리하는 ChunkOrientedTasklet 생성
- chunk(size)
- PartitionStepBuilder
- PartitionStep 생성, 멀티 스레드 방식으로 Job 실행
- JobStepBuilder
- JobStep 생성, Step안에서 Job을 실행
- FlowStepBuilder
- FlowStep 생성, Step안에서 Flow 실행
4. Tasklet
- RepeatTemplate를 사용해서 Tasklet 구문을 트랜잭션 경계 내에서 반복해서 실행
- Task 기반과 Chunk 기반으로 나누어서 Tasklet 실행
- TaskletStep에 의해 반복적으로 수행되며 반환값에 따라 계속 수행 혹은 종료됨
- RepeatStatus - Tasklet의 반복 여부 상태 값
- RepeatStatus.FINISHED - Tasklet 종료, RepeatStatus null 로 반환하면 RepeatStatus.FINISHED로 해석
- RepeatStatus.CONTINUABLE - Tasklet 반복
- RepeatStatus - Tasklet의 반복 여부 상태 값
- Step에 오직 하나의 Tasklet설정만 가능하며 두개 이상 설정 했을 경우 마지막 설정한 객체 실행
Task vs Chunk
- Task
- ItemReader, ItemWriter 같은 청크 기반의 작업보다 단일 작업 기반으로 처리되는 것이 더 효율적인 경우 사용
- Tasklet을 구현하여 사용하며, 대량 처리하는 경우 적합하지 않음(복잡한 구현이 필요하므로)
- Chunk
- 하나의 큰 덩어리를 n개씩 나누어서 실행하다는 의미로 대량 처리에 적합함
- ItemReader, ItemProcessor, ItemWriter를 사용하며 청크 기반 전용 Tasklet은 ChunkOrientedTasklet 구현체 제공
fun step(): Step {
return stepBuilderFactory.get("simpleStep") // StepBuilder 반환
.tasklet(tasklet()) // TaskletStepBuilder 반환
.startLimit(10) // 실행 횟수를 설정
.allowStartIfComplete(true) // Step 성공,실패와 상관없이 항상 Step을 실행하기 위한 설정
.build
}
// Task 기반
stepBuilderFactory.get("simpleStep").tasklet(..).build()
// Chunk 기반
stepBuilderFactory.get("simpleStep").<String, String>chunk(100).reader(..).writer(..).build()
5. JobStep
- Job에 속하는 Step 중 외부 Job을 포함하고 있는 Step
- 외부의 Job이 실패하면 해당 Step이 실패하므로 최종 기본 Job도 실패함
- 모든 메타데이터는 기본 Job / 외부 Job 별로 각각 저장된다.
- Step에 포함되어 있는 Job이지만, 별도의 Job 처럼 메타 테이블에 저장된다
fun jobStep(launcher: JobLauncher): Step {
return stepBuilderFactory.get("simpleStep")
.job(job()) // jobStep 내 에서 실행될 Job 설정
.launcher(launcher) // job을 실행할 JobLauncher 설정
.parametersExctractor(jobParameterExtractor) // Step의 ExecutionContext를 Job이 실행되는 데 필요한 JobParameter로 변환
.build()
}
728x90
반응형
'프로그래밍 노트 > SPRING BATCH' 카테고리의 다른 글
[SPRING BATCH] 배치 초기화 설정 (1) | 2023.10.03 |
---|