[Spring Batch] Batch Job

반응형

이번글에서는 Spring Batch를 사용해 간단한 Batch Job을 수행해보도록 하겠습니다.

1. Spring Batch Project

먼저 Spring Batch Project를 생성하도록 하겠습니다.

저는 'Spring Boot 2''Gradle'을 사용하겠습니다. SQL은 'JPA'를 사용하도록 하겠습니다.

• Spring Boot 2
• Java 8
• Gradle
• JPA

Spring Intilizer를 사용해 각자 환경에 맞는 Spring Project를 생성합니다. 프로젝트 생성시 Spring Dependencies는 다음과 같이 선택합니다.

생성이 완료된 project의 build.gradle은 다음과 같습니다.

build.gradle

plugins {
    id 'org.springframework.boot' version '2.2.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'com.tutorial'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    // batch
    compile 'org.springframework.boot:spring-boot-starter-batch'
    // jpa
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    // jdbc
    compile 'org.springframework.boot:spring-boot-starter-data-jdbc'
    // h2
    runtimeOnly 'com.h2database:h2'
    // mysql
    runtimeOnly 'mysql:mysql-connector-java'
    //maria db
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    // lombok
    compileOnly 'org.projectlombok:lombok'
    // test
    testCompile 'org.springframework.boot:spring-boot-starter-test'
    // batch test
    testCompile 'org.springframework.batch:spring-batch-test'
}

test {
    useJUnitPlatform()
}

2. Simple Job

이제 간단한 Spring Batch Job을 생성해보도록 하겠습니다.

2-1) enable spring batch

먼저 main class를 열어 다음과 같이 @EnableBatchProcessing 어노테이션을 선언합니다.

이를 통해 spring project에서 Spring Batch 기능을 사용할 수 있게 됩니다.

2-2) create simple job

다음으로 job 패키지를 생성해 SimpleJobConfig 파일을 다음과 같이 생성합니다.

SimpleJobConfig

@Slf4j // log 사용을 위한 lombok 어노테이션
@RequiredArgsConstructor // 생성자 DI를 위한 lombok 어노테이션
@Configuration
public class SimpleJobConfig {
    private final JobBuilderFactory jobBuilderFactory; // 생성자 DI 받음
    private final StepBuilderFactory stepBuilderFactory; // 생성자 DI 받음

    @Bean
    public Job simpleJob(){
        return jobBuilderFactory.get("simpleJob")
                .start(simpleStep1())
                .build();
    }

    @Bean
    public Step simpleStep1(){
        return stepBuilderFactory.get("simpleStep1")
                .tasklet((contribution, chunkContext) -> {
                    log.info(">>>>> This is Step1");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
}

• @Configuration : Spring Batch의 모든 Job은 @Configuration으로 등록해 사용합니다.

• jobBuilderFactory.get("simpleJob") : "simpleJob"이란 이름의 Batch Job을 생성합니다. job 이름은 별도로 지정하지 않고, Builder를 통해 지정합니다.

• stepBuilderFactory.get("simpleStep1") : "simpleStep1"이란 이름의 Batch Step을 생성합니다. 마찬가지로 Builder를 통해 이름을 지정합니다.

• tasklet((contribution, chunkContext)) : step에서 수행될 기능들을 명시합니다. tasklet은 Step안에서 '단일로 수행될 custom 기능'을 선언할 때 사용합니다.

위의 Simple Bacth Job은 Batch가 수행되면 단순히 log.info(">>>>> This is Step1")를 출력하는 Job 입니다. 😎

위와 같이 작성후 @EnableBatchProcessing 어노테이션을 선언했던 main 클래스를 실행시켜보면, 아래와 같이 정상적으로 Batch Job이 수행된 것을 확인할 수 있습니다.

3. Job Structure

위의 Batch Job 코드를 살펴보면 simepleJob(Job)이 simepleStep1(Step)을 품고 있음을 확인할 수 있습니다.

Spring Batch에서 Job은 하나의 배치 작업단위를 의미합니다. 이때 Job은 여러 Step으로 구성되어있습니다. 하나의 Batch 작업을 수행하기위해 몇 단계의 Step을 밟도록 구성할 수 있다고 이해하시면 됩니다.

Step은 Tasklet 혹은 Reader/Processor/Writer의 묶음으로 구성되어 있습니다.

이때 Tasklet 하나와 Reader/Porcessor/Writer 묶음은 같은 레벨의 단위로, Reader/Processor가 끝나고 Tasklet으로 마무리 짓는 등의 구성은 할 수 없습니다.


참고 자료 : https://jojoldu.tistory.com/325


추천서적

 

스프링5 레시피:스프링 애플리케이션 개발에 유용한 161가지 문제 해결 기법

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

'Spring > Batch' 카테고리의 다른 글

[Spring Batch] Meta Data Table  (0) 2020.08.17
[Spring Batch] MySQL  (0) 2020.08.17
[Spring Batch] Batch Application  (0) 2020.08.17

댓글

Designed by JB FACTORY