죽지도 않고 돌아온 무무위키
새해가 된 기념으로 블로그에 끄적여본다.
배치를 작성할 때 어쩌다 보니 ItemReader 보다는 그냥 Tasklet 을 구현해서 주로 썼었는데 최근에 ItemReader 를 사용해서 개발할일이 있어서 기록겸 나중에 또 쓸때 또 삽질하지 않기 위한겸 해서 남겨본다.
사용한 batch 는 4.3.3 버전을 사용했다. 라이브러리의 주석을 확인해보니 4.0.0 버전부터 존재하는 친구인것같음
제목에 맞게 예제코드를 준비했다. 사실 이 블로그를 들어온 여러분이 가장 원하는 게 아닐까?
@Bean
fun mumuJob(): Job {
return jobBuilderFactory[JOB_NAME]
.start(this.mumuStep())
.build()
}
@Bean
fun mumuStep(): Step {
return stepBuilderFactory.get(STEP_NAME)
.chunk<MumuEntity, MumuEntity>(CHUNK_SIZE)
.reader(reader())
.writer(writer()).build()
}
@Bean
@StepScope
fun reader(
): JpaPagingItemReader<MumuEntity> {
val paramValues: HashMap<String, Any> = HashMap()
paramValues["start"] = startTime
paramValues["end"] = endTime
return JpaPagingItemReaderBuilder<MumuEntity>()
.name("mumuReader")
.entityManagerFactory(EntityManager)
.queryString(
"""
select me from MumuEntity as me
where me.createdAt between :start and :end
""".trimIndent()
)
.parameterValues(paramValues)
.pageSize(CHUNK_SIZE)
.build()
}
@Bean
fun writer(): ItemWriter<MumuEntity> {
return ItemWriter { entities ->
mumuFunction.execute(entities)
}
}
블로그를 방치한 사이에 코드블럭에 코틀린이 생겼다 굉장;;;
queryString 에는 HQL query 가 들어가야된다. 이 쿼리종류들이 서로 같은듯하면서 묘하게 달라서 문법체크를 잘해야한다.
그리고 나는 사용하지 않았지만 currentItemCount로 읽을아이템의 시작지점도 설정가능하다.
아 그리고 당연하게도 JPA 설정을 해줘야한다
여러분의 배치잡에 한줄 도움이 되었길 바라며
틀린내용은 언제든 지적해주세요 하지만 고치는 것은 조금..많이.. 느릴 수 있습니다.
끝!
'Spring' 카테고리의 다른 글
[Spring] SpringBoot (0) | 2018.02.02 |
---|