이번 포스팅에선 Step과 Tasklet의 관계에 대해서 자세히 알아보도록 하겠다.
AbstractStep
Step 인터페이스를 구현하는 구현체의 추상 클래스는 AbstractStep이다.
Job이 갖고 있는 Step의 execute 메소드를 실행하게 되면 Step의 doExecute 메소드를 실행하게 되는데 doExecute 메소드는 추상 메소드로 어떤 구현체냐에 따라 동작방식이 달라지게 된다.
스프링 배치에서 기본 제공하는 AbstractStep의 구현체들이 몇 가지 있는데 오늘은 가장 일반적으로 사용되는 TaskletStep을 기준으로 알아보도록 하겠다.
TaskletStep
TaskletStep은 한 개의 Tasklet 객체를 갖고 있으며 doExecute 메소드 실행 시 tasklet의 execute 메소드를 실행하게 된다.
우리가 실제 원하는 기능을 동작시키기 위해 커스텀하는 메소드이다.
Tasklet
TaskletStep에 적용되는 Tasklet은 직접 구현하여 사용하면 된다.
public class SampleTasklet implements Tasklet {
private int num = 1;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext){
//num이 5보다 크면 종료
if(num > 5)
return RepeatStatus.FINISHED;
System.out.println("SampleTasklet "+ num++ +"번 째 실행");
return RepeatStatus.CONTINUABLE;
}
}
여기서 중요한 사실이 하나 있는데 스프링 배치에서 권장하는 Chunk방식 역시 Tasklet으로 구성되어 있다는 것이다.
Chunk 방식을 적용하는 순간 우리가 별도로 커스텀한 Tasklet의 execute메소드를 실행하는 것이 아닌 청크 방식 적용시 생성되는 ChunkOrientedTasklet의 execute 메소드를 통해 Chunk 방식이 적용되는 부분을 확인할 수 있다.
Tasklet을 직접 구현하여 사용하거나 선택 구현하여 사용할 수 있다.
'Java' 카테고리의 다른 글
[Spring Batch]#6 스프링 배치 Item Reader (0) | 2023.01.17 |
---|---|
[Thymeleaf] 타임리프 유틸 함수 - #strings, #arrays 등등 (0) | 2022.10.05 |
[Spring Batch] #3 스프링배치 동작 방식 - 기본 (0) | 2022.09.20 |
[Spring Batch] #2 스프링 배치 Job의 실행 방법 (0) | 2022.09.20 |
[Spring Batch] #1 스프링 배치란?(기본 개념 및 예제 포함) (0) | 2022.09.20 |