Spring supports

Spring Boot AutoConfigure

Kotlin JDSL์€ Spring Boot AutoConfigure๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ๊ฐ€ Spring Boot์™€ ์•„๋ž˜์˜ dependency ์ค‘ ํ•˜๋‚˜๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, JpqlRenderContext bean์ด KotlinJdslAutoConfiguration์„ ํ†ตํ•ด ์ž๋™ ์ƒ์„ฑ ๋ฉ๋‹ˆ๋‹ค.

  • com.linecorp.kotlin-jdsl:spring-data-jpa-support (Spring Boot 2 ๋˜๋Š” 3 ์‚ฌ์šฉ ์‹œ)

  • com.linecorp.kotlin-jdsl:spring-data-jpa-boot4-support (Spring Boot 4 ์‚ฌ์šฉ ์‹œ)

  • com.linecorp.kotlin-jdsl:spring-batch-support (Spring Batch 5 ์‚ฌ์šฉ ์‹œ)

  • com.linecorp.kotlin-jdsl:spring-batch6-support (Spring Batch 6 ์‚ฌ์šฉ ์‹œ)

๋งŒ์•ฝ JpqlSerializer ๋˜๋Š” JpqlIntrospector๋ฅผ bean์œผ๋กœ ์„ ์–ธํ–ˆ๋‹ค๋ฉด, ์ž๋™์œผ๋กœ JpqlRenderContext์— ํ•ด๋‹น bean์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Spring Boot 4์—์„œ EntityManager bean ๋“ฑ๋ก

Spring Boot 4 (Spring Data JPA 4)์—์„œ๋Š” EntityManagerBeanDefinitionRegistrarPostProcessor๊ฐ€ deprecated๋˜์–ด EntityManager bean์ด ๋” ์ด์ƒ ์ž๋™ ๋“ฑ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Spring Data 2025.1 Release Notesarrow-up-right์— ๋”ฐ๋ฅด๋ฉด, shared EntityManager๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ SharedEntityManagerCreator๋ฅผ ์„ค์ •์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. KotlinJdslJpqlExecutor๋Š” EntityManager๋ฅผ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ, Spring Boot 4 ์‚ฌ์šฉ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด EntityManager bean์„ ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

import jakarta.persistence.EntityManager
import jakarta.persistence.EntityManagerFactory
import org.springframework.context.annotation.Bean
import org.springframework.orm.jpa.SharedEntityManagerCreator

@SpringBootApplication
class Application {
    @Bean
    fun entityManager(entityManagerFactory: EntityManagerFactory): EntityManager =
        SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory)
}

Kotlin JDSL์€ Spring Boot 4์˜ ์„ค๊ณ„ ๋ณ€๊ฒฝ์„ ์กด์ค‘ํ•˜์—ฌ EntityManager bean์„ AutoConfiguration์—์„œ ๊ฐ•์ œ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Spring Data Repository

๋งŒ์•ฝ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” JpaRepository๊ฐ€ KotlinJdslJpqlExecutor๋ฅผ ์ƒ์†ํ•˜๋ฉด, Kotlin JDSL์ด ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

circle-info

๋งŒ์•ฝ KotlinJdslJpqlExecutor๋ฅผ @DataJpaTest์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด KotlinJdslAutoConfiguration๋ฅผ ํ…Œ์ŠคํŠธ์—์„œ ์ง์ ‘ import ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @DataJpaTest๋Š” slice test์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ์˜ bean๋งŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด bean์—๋Š” KotlinJdslAutoConfiguration์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ @DataJpaTest์—์„œ Kotlin JDSL์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ์—์„œ KotlinJdslAutoConfiguration๋ฅผ ์ง์ ‘ import ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Spring Batch

SpringBatch๋Š” JPQL๋กœ ์ฟผ๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก JpaPagingItemReader์™€ JpaCursorItemReader๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Kotlin JDSL์€ DSL๋กœ ์ƒ์„ฑ๋œ JPQL ์ฟผ๋ฆฌ๊ฐ€ ์œ„ ItemReader๋“ค์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก KotlinJdslQueryProvider๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Last updated