본문 바로가기
Java

[Spring Batch] #4 스프링 배치 Step 과 Tasklet

by Jayson Jeong 2022. 9. 27.

이번 포스팅에선 Step과 Tasklet의 관계에 대해서 자세히 알아보도록 하겠다.

 

AbstractStep

Step 인터페이스를 구현하는 구현체의 추상 클래스는 AbstractStep이다. 

Job이 갖고 있는 Step의 execute 메소드를 실행하게 되면 Step의 doExecute 메소드를 실행하게 되는데 doExecute 메소드는 추상 메소드로 어떤 구현체냐에 따라 동작방식이 달라지게 된다.

AbstractStep.java

 

스프링 배치에서 기본 제공하는 AbstractStep의 구현체들이 몇 가지 있는데 오늘은 가장 일반적으로 사용되는 TaskletStep을 기준으로 알아보도록 하겠다.

 

 

TaskletStep

TaskletStep은 한 개의 Tasklet 객체를 갖고 있으며 doExecute 메소드 실행 시 tasklet의 execute 메소드를 실행하게 된다.

우리가 실제 원하는 기능을 동작시키기 위해 커스텀하는 메소드이다.

TaskletStep.java
TaskletStep.java

 

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;
    }

}

console log

 

여기서 중요한 사실이 하나 있는데 스프링 배치에서 권장하는 Chunk방식 역시 Tasklet으로 구성되어 있다는 것이다.

Chunk 방식을 적용하는 순간 우리가 별도로 커스텀한 Tasklet의 execute메소드를 실행하는 것이 아닌 청크 방식 적용시 생성되는 ChunkOrientedTasklet의 execute 메소드를 통해 Chunk 방식이 적용되는 부분을 확인할 수 있다.

Tasklet을 직접 구현하여 사용하거나 선택 구현하여 사용할 수 있다.

 

ChunkOrientedTasklet.java