
๐ฉ๐ป๐ป Today I Lean ...
Kotlin/Spring ์ ์ฐ ์์คํ ํํธ ๊ฐ์์์ Reader ๊ตฌํ ๋ด์ฉ์ ๋ณต์ตํ๋ค.
Reader ๊ตฌํ
@Configuration
class DeliveryCompletedItemReaderConfig {
companion object {
const val CHUNK_SIZE = 500
fun getStartDateTime(): ZonedDateTime =
ZonedDateTime.of(LocalDate.now(), LocalTime.MIN, ZoneId.of("Asia/Seoul"))
fun getEndDateTime(): ZonedDateTime =
ZonedDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN, ZoneId.of("Asia/Seoul"))
}
@Bean
@StepScope
fun deliveryCompletedJpaItemReader(orderItemRepository: OrderItemRepository): RepositoryItemReader<OrderItem> =
RepositoryItemReaderBuilder<OrderItem>()
.name("deliveryCompletedJpaItemReader")
.repository(orderItemRepository)
.methodName("findByShippedCompletedAtBetween")
.arguments(getStartDateTime(), getEndDateTime())
.pageSize(CHUNK_SIZE)
.sorts(mapOf("shippedCompletedAt" to Sort.Direction.ASC))
.build()
}
RepositoryItemReader
- Spring Batch์์ ์ ๊ณตํ๋ ItemReader(๋ฐ์ดํฐ๋ฅผ ํ ๊ฑด์ฉ ์ฝ์ด์ค๋ ์ธํฐํ์ด์ค) ๊ตฌํ์ฒด
- JPARepository๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์จ๋ค.
@StepScope
- Job ์คํ ์์ ์ Bean์ ์์ฑํ๋ Spring Batch ์ค์ฝํ
๊ฐ์ ๋ด์ฉ์๋ Scope๊ฐ ์์๋๋ฐ (Sigletone) , ์ด๋ ๊ฒ ๋๋ฉด ๋ ์ง ํจ์์ ํ๋ฆฌ์ผ์ด์ ์ฒ์ ์คํ๋๋ ์์ ์ ๋ ์ง๋ก ๊ณ ์ ๋์ด๋ฒ๋ฆฐ๋ค๊ณ ํ๋ค. ๊ทธ๋์ @StepScope ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ์ฌ Step๋ง๋ค Bean์ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ๋ค.
์ถํ ๊ฐ์์ ๋ฆฌํฉํ ๋ง ๋ด์ฉ์ด ํฌํจ๋์ด ์๋๋ฐ, ๊ทธ๋ ๋ค์ Reader ์์ฑ ๊ตฌํ ๋ถ๋ถ ์ ๋ฆฌํด๋ด์ผ๊ฒ ๋ค.