batch 01
18 Feb 2018배치 관련 객체 관계도
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이 실행됨을 확인할 수 있다.