[Spring Batch] Batch Job

minholee_93·2020년 3월 25일
0

Spring Batch

목록 보기
2/4
post-thumbnail

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


이번글에서는 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으로 마무리 짓는 등의 구성은 할 수 없습니다.

profile
Backend Developer at FLO 🎵

0개의 댓글