본문 바로가기


Spring

[SpringBatch] JpaPagingItemReader 예제

죽지도 않고 돌아온 무무위키

새해가 된 기념으로 블로그에 끄적여본다.

배치를 작성할 때 어쩌다 보니 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