Spring batch

Spring batch 란 ? - 2

Soohocoding 2024. 7. 7. 11:20

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