[Kotlin] Application 설정값 가져오는 방법 - ConfigurationProperties로 구성

2021. 5. 17. 07:00·아카이브/kotlin
반응형

나를 닮았다고 한다...

이번 글에서는 Kotlin에서 아래의 application.yml의 설정값을 읽어오는 방법을 정리해보겠습니다. 이 글에서 사용하는 설정방법은 SpringBoot 2.2.1 이상 버전부터 지원가능한 방법입니다. 

 

모든 소스는 Github에 올려두었습니다. 

Application.yml

sample:
  kotlin:
    language: kotlin
    study-days: 30
  java:
    language: java
    study-days: 90
    test: javaTest

 

build.gradle.kts

아래의 디펜던시가 추가되있어야 ConfigurationProperties를 사용할 수 있습니다. 

dependencies {
    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
}

 

SampleProperties.kt

Application.yml에서 설정 정보를 매핑할 객체를 생성합니다. 

 

아래의 코드를 생성하면 ConfigurationProperties에서 에러가 발생합니다. 에러를 무시하고 하단의 설정을 계속 진행하시면 발생한 에러는 사라집니다.

@ConstructorBinding    // 1)
@ConfigurationProperties(prefix = "sample")  // 2)
data class SampleProperties (
    val kotlin: KotlinProperties,
    val java: JavaProperties
) {
    data class KotlinProperties(
        val language: String,
        val studyDays: Int
    )

    data class JavaProperties(
        val language: String,
        val studyDays: Int,
        val test: String
    )
}

1) SpringBoot 2.2.1 부터 지원되는 기능으로 따로 Component 어노테이션을 선언하지 않고 빈에 등록해주며 생성자 바인딩 시켜주는 어노테이션입니다. 

2) Application.yml 에서 prefix "sample"인 설정정보를 읽어옵니다.

 

Tip!

Application.yml 에 설정 키 값에 "-"가 들어갈 경우 camel 케이스로 작성해주시면 매핑시켜줍니다.

 

MainApplication.kt

ConfigurationProperties를 스캔하는 어노테이션을 추가합니다. ( 여기까지 작업하셨다면 위에서 발생했던 에러는 사라집니다. )

@ConfigurationPropertiesScan    // 추가
@SpringBootApplication
class SampleApplication

fun main(args: Array<String>) {
    runApplication<SampleApplication>(*args)
}

 

사용

Bean에 등록된 설정 정보를 가지고 있는 객체를 불러와 사용합니다.

@RestController
@RequestMapping("/sample")
class SampleController(
    val sampleProperties: SampleProperties
) {

    @GetMapping
    fun getSetting() = sampleProperties.kotlin.language
}

 

Test Code

테스트 코드에서 확인하시려면 몇가지 설정을 추가적으로 해주셔야합니다.

@SpringBootTest  
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
@EnableConfigurationProperties(SampleProperties::class)
@TestPropertySource("classpath:application.yml")
internal class SamplePropertiesTest(
    val sampleProperties: SampleProperties
) {

    @Test
    fun `properties 조회`() {
        assertThat(sampleProperties.kotlin.language).isEqualTo("kotlin")
        assertThat(sampleProperties.kotlin.studyDays).isEqualTo(30)

        assertThat(sampleProperties.java.language).isEqualTo("java")
        assertThat(sampleProperties.java.studyDays).isEqualTo(90)
        assertThat(sampleProperties.java.test).isEqualTo("javaTest")
    }

}
  • @SpringBootTest : Bean 객체를 컨테이너에 올려 테스트하기 위한 설정
  • @TestConstructor : Constructor에 있는 속성값들에 빈주입하는 설정. ( 개인취향이므로 따로 @Autowired로 사용해도 무방 )
  • @EnableConfigurationProperties : 테스트 타겟인 설정 객체를 선언하면 테스트 코드에서 설정 객체에 매핑
  • @TestPropertySource : 테스트 타겟인 설정값들이 담기 yml파일 정보 세팅

 

테스트 코드를 실행하면 정상작동을 확인할 수 있습니다.

 

Reference 

- https://www.baeldung.com/spring-boot-testing-configurationproperties

- https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/spring-boot-features.html#boot-features-kotlin-configuration-properties

반응형

'아카이브 > kotlin' 카테고리의 다른 글

Kotlin (꿀)Tips!  (0) 2022.04.18
Querydsl-JPA 코틀린스럽게 작성하기 ( 설정 포함 )  (1) 2021.04.29
'아카이브/kotlin' 카테고리의 다른 글
  • Kotlin (꿀)Tips!
  • Querydsl-JPA 코틀린스럽게 작성하기 ( 설정 포함 )
에디개발자
에디개발자
------ 한발자국씩 성장하자 ------ Github: https://github.com/yongtaelim LinkedIn: https://www.linkedin.com/in/%EC%9A%A9%ED%83%9C-%EC%9E%84-622b69218/
    250x250
  • 에디개발자
    에디블로그
    에디개발자
    • 분류 전체보기 (289) N
      • AI (68) N
        • Claude (28) N
        • ChatGPT (12)
        • Cursor (13)
        • Gemini (10)
        • 트랜드 (4)
        • 오늘의 AI 업데이트 (1)
      • 개발 트렌드 (35) N
        • 데일리 픽 (28) N
        • 툴 리뷰 (1)
      • 개발자 도구 (11) N
        • 생산성 툴 (5) N
        • 노트 & 지식관리 (1) N
        • 협업 & 이슈 (0)
        • 터미널 & 환경 (1) N
        • API & DB (3)
        • 에디터 & IDE (1)
      • 실험실 (1)
        • AI 자동화 (0)
        • 자동매매 (1)
        • 블로그 자동화 (0)
      • 아카이브 (168)
        • MindControl (12)
        • TroubleShooting (16)
        • kotlin ( 아카이브 ) (16)
        • java ( 아카이브 ) (15)
        • spring (6)
        • test (4)
        • message-queue (10)
        • object (22)
        • spring-data (28)
        • spring-batch (7)
        • devops (5)
        • java (5)
        • kotlin (3)
        • database (2)
        • Study (3)
        • Develop (1)
        • Develop Tool (1)
        • Daily Develop (7)
        • Book (5)
  • 인기 글

  • 태그

    ai 코딩
    ChatGPT
    프로그래밍
    cursor
    코틀린
    AI 업데이트
    anthropic
    ai 정보
    개발자
    OpenAI
    queryDSL
    스터디
    AI 활용
    에디
    claude
    Ai
    Gemini
    클로드
    JPA
    개발자 도구
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에디개발자
[Kotlin] Application 설정값 가져오는 방법 - ConfigurationProperties로 구성
상단으로

티스토리툴바