Spring Batch - Tasklet(테스크렛) ?Spring batch2024. 7. 7. 13:47
Table of Contents
Spring Batch에서 청크 기반 처리와 반대되는 개념은 테스크렛(Tasklet) 기반 처리 입니다.
청크 기반처리는 데이터를 일정한 크기의 청크 단위로 나누어 읽고 처리한 후 저장하는 방식인 반면, 테스크렛 기반 처리는 하나의 단일 작업을 수행하는 방식입니다.
테스크렛 기반 처리
테스크렛 기반 처리는 단일 작업이나 반복되지 않는 작업을 수행할 때 주로 사용됩니다. 예를 들어, 파일을 지우거나 데이터베이스 테이블을 초기화하는 작업을 수행할 때 유용합니다.
주요 개념
- Tasklet:
- Spring Batch의 Tasklet 인터페이스를 구현하여 작업을 정의합니다.
- execute 메서드 내에서 작업을 수행하며, 작업이 완료되면 RepeatStatus.FINISHED를 반환합니다.
- Step:
- Tasklet 기반의 Step을 정의하여 작업을 실행합니다.
예제 코드
다음은 파일을 삭제하는 테스크렛 기반 처리의 예제입니다.
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.File;
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Bean
public Job job(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.start(taskletStep(stepBuilderFactory))
.build();
}
@Bean
public Step taskletStep(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("taskletStep")
.tasklet(fileDeletingTasklet())
.build();
}
@Bean
public Tasklet fileDeletingTasklet() {
return new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
File file = new File("path/to/file.txt");
if (file.exists()) {
file.delete();
System.out.println("File deleted");
} else {
System.out.println("File not found");
}
return RepeatStatus.FINISHED;
}
};
}
}
동작 설명
- Job: job 메서드는 Job을 정의합니다. 이 Job은 단일 Tasklet 기반 Step을 실행합니다.
- Step: taskletStep 메서드는 Tasklet 기반 Step을 정의합니다.
- Tasklet: fileDeletingTasklet 메서드는 파일을 삭제하는 작업을 정의합니다. 파일이 존재하면 삭제하고, 존재하지 않으면 "File not found" 메시지를 출력합니다.
실행 결과
위의 예제를 실행하면 지정된 경로에 있는 파일이 삭제됩니다. 파일이 존재하지 않는 경우 "File not found" 메시지가 출력됩니다.
청크 기반 처리와 태스크렛 기반 처리의 비교
특성청크 기반 처리태스크렛 기반 처리
처리 단위 | 일정 크기의 청크 | 단일 작업 |
주요 사용 사례 | 대량 데이터 처리 (읽기, 처리, 쓰기) | 단일 작업 또는 반복되지 않는 작업 (파일 삭제, 테이블 초기화) |
트랜잭션 관리 | 청크 단위로 트랜잭션 관리 | 전체 작업을 단일 트랜잭션으로 관리 |
구성 요소 | ItemReader, ItemProcessor, ItemWriter |
Tasklet |
결론
청크 기반 처리는 대량의 데이터를 효율적으로 처리하는 데 적합하며, 태스크렛 기반 처리는 단일 작업이나 반복되지 않는 작업을 수행하는 데 적합합니다. 두 가지 방식 모두 Spring Batch에서 유용하게 사용되며, 사용 사례에 맞게 적절한 방식을 선택하여 배치 작업을 구성할 수 있습니다.
'Spring batch' 카테고리의 다른 글
Spring Batch - Chunk(청크) 란 ? (0) | 2024.07.07 |
---|---|
Spring batch 란 ? - 2 (0) | 2024.07.07 |
Spring Batch 란? - 1 (0) | 2024.07.07 |
@Soohocoding :: Soohocoding
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!