[Spring Batch, Kotlin] Spring Batch 5.0 이후 변경 사항에 대한 간단한 예제

작성일 : 2023년 04월 27일
  • #Spring Boot
  • #Spring Batch
  • #Kotlin

Spring Batch 5.0 출시 이후 많은 부분이 변경 된 것 같다. 거기에 kotlin을 도입해 배치 앱을 구성하고자 하는데 한국어 레퍼런스가 많이 없는 것 같다. 간단한 내용과 예제 소스를 통해 알아보도록 하자.

간단한 변경 사항

아래 내용은 간단한 변경 사항만을 작성하였다. 자세한 내용은 하단 참조 링크를 확인하자.

  1. 현재 Java LTS 버전인 17 부터 지원한다.

  2. StepBuilderFactory, JobBuilderFactory가 Deprecated 되었으며 JobRepository를 명시적으로 사용하도록 권장한다.

  3. TransactionManager 또한 명시적으로 사용하도록 권장한다.

  4. @EnableBatchProcessing을 더이상 사용하지 않아도 된다. (혹은 않아야 한다.)

예제 소스

간단한 Configuration 예제 소스

// Configuration
package com.ssan.batch.domain.sample

import org.springframework.batch.core.Job
import org.springframework.batch.core.Step
import org.springframework.batch.core.job.builder.JobBuilder
import org.springframework.batch.core.repository.JobRepository
import org.springframework.batch.core.step.builder.StepBuilder
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.transaction.PlatformTransactionManager

@Configuration
class SampleJobConfiguration (
    private val jobRepository: JobRepository,
    private val transactionManager: PlatformTransactionManager,
    private val tasklet: SampleTasklet
) {
    @Bean
    fun job(): Job {
        return JobBuilder("job", jobRepository)
            .start(step())
            .build()
    }
    @Bean
    fun step(): Step {
        return StepBuilder("step", jobRepository)
            .tasklet(tasklet, transactionManager)
            .build()
    }
}


간단한 Tasklet 예제 소스

// Tasklet
package com.ssan.batch.domain.sample

import org.springframework.batch.core.StepContribution
import org.springframework.batch.core.configuration.annotation.StepScope
import org.springframework.batch.core.scope.context.ChunkContext
import org.springframework.batch.core.step.tasklet.Tasklet
import org.springframework.batch.repeat.RepeatStatus
import org.springframework.stereotype.Component

@StepScope
@Component
class SampleTasklet: Tasklet {
    override fun execute(contribution: StepContribution, chunkContext: ChunkContext): RepeatStatus? {
        println("tasklet start")

        return RepeatStatus.FINISHED
    }
}

Github 링크

https://github.com/zodaland/spring-batch-sample-app-after-v5.0

Reference

What's New in Spring Batch 5.0