taskletStepBuilder: tasklet 인터페이스를 구현한 구현체를 실행시킴
아래와 같이 batch job을 구성하였다.
@Bean
public Job batchJob() {
return this.jobBuilderFactory.get("batchJob")
.incrementer(new RunIdIncrementer())
.start(step1())
.next(step2())
.next(step4())
.next(step5())
// .next(step3())
.build();
}
step1을 살펴보겠습니다.
step1은 3가지 과정을 거치고 있습니다.
- get 메서드 호출
- tasklet 메서드 호출
- build 메서드 호출
각각의 과정이 하는 역할을 살펴보도록 하겠습니다.
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet((contribution, chunkContext) -> {
System.out.println("step1 has executed");
return RepeatStatus.FINISHED;
})
.build();
}
1. get 메서드 호출
// brief
get 메서드를 호출하게 되면 StepBuilder를 생성하고 return 받습니다.
stepbuilder factory는 step 이름과 jobRepository, transactionManager를 가지고 StepBuilder를 생성합니다.
2. tasklet 메서드 호출
// brief
tasklet 메서드 호출을 하게 되면 TaskletStepBuilder를 return 받는다.
3. build 메서드 호출
build 메서드를 실행하게 되면 taskletStep을 만들게 됩니다.
chunk 기반 step에 대해 알아보자.
1. get 메서드 호출 -> StepBuilder를 return 받음
2. chunk 메서드 호출 -> SimplestepBuilder를 return 받음
3. build 메서드 호출 -> taskletStep을 return 받음
@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.<String, String>chunk(3)
.reader(() -> null)
.writer(list -> {})
.build();
}
multiThread 관련 작업을 위한 partitionalStep에 대해 알아보자.
1. get 메서드 호출 -> StepBilder
2. partitioner 메서드 호출 -> partitionStepBuilder
3. build 메서드 호출 -> partitionStep
@Bean
public Step step3() {
return stepBuilderFactory.get("step3")
.partitioner(step1())
.gridSize(2)
.build();
}
step내에서 job을 구동할 수 있는 step에 대해 알아보자.
1. get 메서드 호출 -> stepBuilder
2. partitioner 메서드 호출 -> jobStepBuilder
3. build 메서드 호출 -> jobstep
flow step에 대해서 알아보자.
1. get 메서드 호출 -> stepBuilder
2. flow 메서드 호출 -> FlowStepBuilder
3. build 메서드 호출 -> flowStep 생성
'강의 > 스프링배치' 카테고리의 다른 글
tasklet() - startlimit() / allowStartIfComplete (0) | 2023.01.21 |
---|---|
TaskletStep (0) | 2023.01.16 |
simpleJob 아키텍처 (0) | 2023.01.15 |
스프링 배치 실행 - incrementer() (0) | 2023.01.15 |
스프링 배치 실행 - preventRestart() (0) | 2023.01.14 |