[Spring] 설정파일 우선순위를 알아보자

Hocaron·2023년 10월 6일
2

Spring

목록 보기
34/44

서비스의 설정값을 변경해주었는데도, 반영이 안 되는 경우가 있다🫠
설정값들이 위치하는 설정파일의 우선순위를 공부하고, 알맞은 파일에 설정값을 변경해주자.

설정파일 우선순위

noPriorityProperty
1Highdevtools 활성 상태일 때 $HOME/.config/spring-boot 디렉토리 내 devtools 전역 설정
2@TestPropertySource
3@SpringBootTest와 함께 사용된 properties
4Command Line Arguments
5SPRING_APPLICATION_JSON(환경 변수 또는 시스템 변수에 포함된 인라인 JSON)
6ServletConfig 초기화를 위한 매개변수
7ServletContext 초기화를 위한 매개변수
8JNDI attributes(java:comp/env)
9자바 시스템 변수(System.getProperties())
10OS 환경 변수
11application.properties 파일
12@Configuration 클래스
13Low기본 속성(SpringApplication.setDefaultProperties)

application.properties 우선순위

11번 application.properties(yml) 의 경우 파일 위치와 프로파일에 따른 우선순위가 적용된다.

PriorityProperty Location
Highclasspath 내부에 존재하면서 .config 디렉토리에 위치한 application.properties
classpath 내부에 존재하면서 .config 디렉토리에 위치한 application-{profile}.properties
classpath 내부에 존재하는 application.properties
classpath 내부에 존재하는 application-{profile}.properties
classpath 외부에 존재하면서 config 디렉토리에 위치한 application.properties
classpath 외부에 존재하면서 config 디렉토리에 위치한 application-{profile}.properties
classpath 외부에 존재하는 application.properties
Lowclasspath 외부에 존재하는 application-{profile}.properties

classpath 은 보통 src/main/resources 로 설정되어있다.

하지만 외부 설정 파일 import 시 외부 설정 값이 우선 사용

spring:
  config:
    import: optional:/...

import 시에는 이 설정값이 최우선된다.

공식 문서에서도 외부에서 import된 값이 우선순위를 지닌다고 명시되어 있다.

Values from the imported config file
will take precedence over the file that triggered the import.

🤔 외부 설정값은 보통 config server 를 쓰는 경우가 많다. 만약 나의 로컬 서버에서 config server 있는 동일한 설정값을 덮어쓰기 하고 싶다면 어떻게 해야할까?

remote properties에 아래 설정을 해주어야 override가 된다.
로컬에는 백날 설정해도 설정이 먹지 않는다..🫠

spring:
  cloud:
    config:
      allowOverride: true
      overrideNone: true

정리

  • 설정파일에는 우선순위가 있다.
  • config server 에 존재하는 설정파일에 override 옵션을 추가해야 로컬에서 해당값을 덮어쓰기 했을 때 동작한다.

References

profile
기록을 통한 성장을

0개의 댓글