백엔드/Spring

[ JAVA/Spring ] yml의 변수

Pendine 2025. 4. 15. 01:38
728x90
반응형

application.yml 에서 DB의 정보를 분리하기 위해 있었던 오류를 정리하는 글이다.

 

초기 프로젝트 세팅시 application.yml에 모든 정보를 집어넣고 세팅했었고

DB연결을 분리하고 DB 접속 정보는 변수로 다루기 위해 db.yml이라고 선언.

application.yml에서 불러오는(import) 형식으로 선언했다.

spring:  
  config:  
    import:  
      - classpath:/application-db.yml  
      - classpath:/mybatis.yml

 

 

문제 yml에 변수를 선언하고 가져다 사용하려고 했던 부분이다.

로딩할때 application.yml에서 다른 yml파일을 불러올 수 는 있지만

import 된 yml 안의 정의한 변수는 치환이 안돼기 때문이다.

Spring의 설정 로딩 시점과 proertySource 처리순서로 인해 import 된 YML 은 단순 설정 병합만 하고, 변수로는 못쓰기 때문이다.

 

해결방법은 다음과 같다.

 application-db.yml의 db 커넥션 부분을 application.yml에 선언
 application-db.yml의 변수 부분을 .properties 형식으로 치환

 + properties의 변수는 콜론 이후 공백을 삽입해줘야 인식할 수 있다.

## application.yml
spring:
  config:
    import:
      - classpath:/application-db.properties
      - classpath:mybatis.yml
  datasource:
    hikari:
      driver-class-name: ${DB.DRIVER}
      jdbc-url: ${DB.URL}
      username: ${DB.ID}
      password: ${DB.PW}
      #      pool-name: [PoolName - 임의]
      connection-timeout: 30000
      maximum-pool-size: 20
      minimum-idle: 30
      idle-timeout: 60000
      connection-test-query: select 1
      auto-commit: true

 

## application-db.properties
DB.DRIVER: db-driver
DB.URL: db-url
DB.ID: db-userName
DB.PW: db-password

 

 

 

참고자료

  • Spring Boot 공식 문서 – 외부 설정(Externalized Configuration):
    Spring Boot에서 다양한 방법으로 설정을 외부화하는 방법에 대해 자세히 설명하고 있어.
    Spring Boot Externalized Configuration
  • Spring Boot 공식 문서 – 프로퍼티 파일과 YAML 파일 사용:
    .properties와 .yml 파일의 사용법과 차이점에 대해 설명하고 있어.
    Spring Boot Configuration Files
  • Spring Boot 공식 문서 – 프로파일(Profile) 설정:
    환경별로 다른 설정을 적용할 수 있는 프로파일 기능에 대해 설명하고 있어.
    Spring Boot Profiles
728x90
반응형