batch 01

배치 관련 객체 관계도

Job이라는 하나의 큰 일감에 여러 단계(Step)를 두고, 각 단계를 배치의 기본 흐름대로 구현한다.

각 구성요소의 역할

Job

배치 처리 과정을 하나의 단위로 만들어 표현한 객체

JobRepository

어떤 Job이 실행되었으며 몇 번 실행되었고 언제 끝났는지 등 배치 처리에 대한 메타데이터를 저장한다.

ItemReader

Step의 대상이 되는 배치 데이터를 읽어온다.

ItemProcessor

ItemReader로 읽어온 배치 데이터를 변환하는 역할

ItemWriter

배치 데이터를 저장

스프링부트 간단 예

build.gradle.kts

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    runtimeOnly("com.h2database:h2")

    // batch
    implementation("org.springframework.boot:spring-boot-starter-batch")

    // log
    implementation("io.github.microutils:kotlin-logging:2.0.6")

    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.batch:spring-batch-test")
}

config

@Configuration
@EnableBatchProcessing
class SimpleJobConfig(
    private val jobBuilderFactory: JobBuilderFactory,
    private val stepBuilderFactory: StepBuilderFactory
) {

    companion object : KLogging()

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

    @Bean
    fun simpleStep1(): Step {
        return stepBuilderFactory.get("simpleStep1")
            .tasklet { contribution, chunkContext ->
                logger.info(">>> Step1")
                RepeatStatus.FINISHED
            }.build()
    }
}

애플리케이션을 실행하면 simpleJob이 실행됨을 확인할 수 있다.

Source