728x90
반응형
Tasklet
정의
- Tasklet은 Spring Batch의 기본 구성 요소 중 하나로, 작업(step) 내에서 단일 작업을 수행하는데 사용됩니다.
- Tasklet은 사용자 정의 코드를 통해 특정 작업을 실행하며, 주로 단순하거나 일회성 작업에 사용됩니다.
사용 사례
- 파일 전송, 간단한 데이터 변환, 상태 업데이트 등 단일 단계로 완료할 수 있는 작업에 적합합니다.
특징
- Tasklet은 배치 작업을 단일 작업으로 간주하여 한 번에 처리하려고 하므로 Chunk 방식에서 Chunk 크기만큼 데이터를 나누어 처리하는 방식과 상반되어 대용량에는 적합하지 않습니다.
- Tasklet 내에서 실행할 로직을 직접 구현합니다.
Tasklet
인터페이스를 구현하며,execute
메서드를 오버라이드하여 사용자 정의 작업을 정의합니다.- 반복적인 데이터 처리보다는 조건부 실행, 리소스 관리, 단일 작업 수행에 이상적입니다.
- 배치 작업의 진행 상태나 결과를 기반으로 RepeatStatus를 반환하여 작업의 반복 실행 여부를 결정합니다.
예제 코드
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
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.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableBatchProcessing
public class TaskletConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step exampleTaskletStep() {
return stepBuilderFactory.get("exampleTaskletStep")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
System.out.println("Tasklet has been executed.");
return RepeatStatus.FINISHED;
}
}).build();
}
@Bean
public Job exampleTaskletJob(JobExecutionListener listener) {
return jobBuilderFactory.get("exampleTaskletJob")
.start(exampleTaskletStep())
.build();
}
}
Chunk
정의
- Chunk 기반 처리는 대량의 데이터를 처리할 때 사용되며, 데이터를 여러 개의 작은 단위(Chunk)로 나누어 처리합니다.
- 일반적으로 읽기(read), 처리(process), 쓰기(write) 패턴을 따릅니다.
사용 사례
- 대용량 데이터 처리, 복잡한 데이터 변환 및 조작, 데이터베이스 배치 업데이트 / 삽입 작업에 적합합니다.
특징
ItemReader
,ItemProcessor
,ItemWriter
의 세 가지 주요 구성 요소를 사용합니다.ItemReader
는 데이터를 읽고,ItemProcessor
는 읽은 데이터를 처리(변환, 필터링 등),ItemWriter
는 처리된 데이터를 쓰는 역할을 합니다.- Chunk 크기는 한 번에 처리할 아이템의 수를 정의하며, 메모리 사용량과 성능 최적화에 영향을 줍니다.
예제 코드
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.List;
@Configuration
@EnableBatchProcessing
public class ChunkConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public ItemReader<String> itemReader() {
return new ListItemReader<>(Arrays.asList("spring", "batch", "example"));
}
@Bean
public ItemProcessor<String, String> itemProcessor() {
return item -> item.toUpperCase();
}
@Bean
public ItemWriter<String> itemWriter() {
return items -> items.forEach(System.out::println);
}
@Bean
public Step chunkBasedStep() {
return stepBuilderFactory.get("chunkBasedStep")
.<String, String>chunk(2)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
@Bean
public Job chunkBasedJob() {
return jobBuilderFactory.get("chunkBasedJob")
.start(chunkBasedStep())
.build();
}
}
728x90
반응형
'개발 > SpringBatch' 카테고리의 다른 글
Spring Batch에서 JpaPagingItemReader와 JpaCursorItemReader의 이해 (0) | 2024.02.27 |
---|---|
Spring batch 그게 뭔데? (1) | 2024.02.25 |
[Spring Batch] 2. Spring Batch 용어 (0) | 2023.01.17 |
댓글