Spring batch 란 ? - 2Spring batch2024. 7. 7. 11:20
Table of Contents
2. Spring Batch의 기본 개념
Spring Batch의 주요 개념은 다음과 같습니다:
- Job: 배치 처리 작업의 단위입니다. 하나의 Job은 여러 개의 Step으로 구성됩니다.
- Step: Job을 구성하는 세부 작업의 단위입니다. Step은 독립적으로 실행되며, 각각의 Step은 읽기(read), 처리(process), 쓰기(write) 단계를 포함할 수 있습니다.
- JobInstance: Job의 실행 인스턴스를 의미합니다. 같은 Job이 여러 번 실행될 수 있는데, 각 실행을 JobInstance라고 합니다.
- JobExecution: JobInstance의 실행 정보를 담고 있습니다. 실행 상태, 시작 및 종료 시간, 실패 원인 등의 정보를 포함합니다.
- StepExecution: Step의 실행 정보를 담고 있습니다. 실행 상태, 읽기 및 쓰기 횟수, 실패 원인 등의 정보를 포함합니다.
3. Spring Batch 설정
Spring Batch를 사용하려면 Spring Boot와 Spring Batch 의존성을 추가해야 합니다. Gradle을 사용하는 경우 build.gradle 파일에 다음과 같이 추가합니다:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}
4. Spring Batch 기본 구성 요소
4.1 Job 설정
Job은 배치 작업의 단위로, 여러 Step으로 구성됩니다. 다음은 Job을 설정하는 예제입니다:
import org.springframework.batch.core.Job;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BatchConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
}
@Bean
public Job exampleJob() {
return jobBuilderFactory.get("exampleJob")
.start(exampleStep())
.build();
}
@Bean
public Step exampleStep() {
return stepBuilderFactory.get("exampleStep")
.<String, String>chunk(10)
.reader(exampleItemReader())
.processor(exampleItemProcessor())
.writer(exampleItemWriter())
.build();
}
@Bean
public ExampleItemReader exampleItemReader() {
return new ExampleItemReader();
}
@Bean
public ExampleItemProcessor exampleItemProcessor() {
return new ExampleItemProcessor();
}
@Bean
public ExampleItemWriter exampleItemWriter() {
return new ExampleItemWriter();
}
}
4.2 ItemReader, ItemProcessor, ItemWriter
ItemReader, ItemProcessor, ItemWriter는 각각 읽기, 처리, 쓰기 단계를 담당합니다. 예제 클래스를 살펴보겠습니다.
ExampleItemReader: 데이터를 읽어오는 역할을 합니다.
import org.springframework.batch.item.ItemReader;
public class ExampleItemReader implements ItemReader<String> {
private String[] input = {"item1", "item2", "item3"};
private int index = 0;
@Override
public String read() {
if (index < input.length) {
return input[index++];
} else {
return null; // null을 반환하면 종료를 의미합니다.
}
}
}
ExampleItemProcessor: 데이터를 처리하는 역할을 합니다
import org.springframework.batch.item.ItemProcessor;
public class ExampleItemProcessor implements ItemProcessor<String, String> {
@Override
public String process(String item) {
return item.toUpperCase(); // 데이터를 대문자로 변환
}
}
- ExampleItemWriter: 데이터를 저장하는 역할을 합니다.
import org.springframework.batch.item.ItemWriter;
import java.util.List;
public class ExampleItemWriter implements ItemWriter<String> {
@Override
public void write(List<? extends String> items) {
for (String item : items) {
System.out.println("Writing item: " + item);
}
}
}
5. JobLauncher를 이용한 Job 실행
Job을 실행하기 위해서는 JobLauncher를 사용해야 합니다. JobLauncher는 Job을 시작하는 역할을 합니다.
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class JobRunner implements CommandLineRunner {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job exampleJob;
@Override
public void run(String... args) throws Exception {
jobLauncher.run(exampleJob, new JobParametersBuilder().toJobParameters());
}
}
이제 Spring Boot 애플리케이션을 실행하면 설정한 Job이 자동으로 실행됩니다.
6. 데이터베이스 설정
Spring Batch는 Job 및 Step의 실행 정보를 저장하기 위해 데이터베이스를 사용합니다. 기본적으로 H2 데이터베이스를 사용할 수 있으며, application.properties 파일에 다음과 같이 설정할 수 있습니다:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.batch.initialize-schema=always
'Spring batch' 카테고리의 다른 글
Spring Batch - Tasklet(테스크렛) ? (0) | 2024.07.07 |
---|---|
Spring Batch - Chunk(청크) 란 ? (0) | 2024.07.07 |
Spring Batch 란? - 1 (0) | 2024.07.07 |
@Soohocoding :: Soohocoding
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!