스프링 외부 설정 우선순위

HeoSeungYeon·2022년 1월 30일
0
post-thumbnail

🗯️ 문제


우리 프로젝트는 application.yml 에서 profile.active 설정을 주고, secrets 서브모듈에서 관리되어지는 local, dev, prod 설정 파일을 사용한다.

배포 과정에서 develop 브랜치의 파일을 main 브랜치에 Pull Request를 요청하는 과정에서 application.yml 의 profile.active의 설정 값(develop 브랜치 기준 : dev)을 prod(배포용 설정)으로 수정하지 못하지 않나?! 그럼 어떻게 해야될까? 하는 의문점이 생겼다.

🔥 해결 방법


참고 문서를 찾아보니 스프링에서 외부 설정에 대한 우선순위는 다음과 같았다.

1.유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties


2.테스트에 있는 @TestPropertySource


3.@SpringBootTest 애노테이션의 properties 애트리뷰트


4.커맨드 라인 아규먼트


5.SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티


6.ServletConfig 파라미터


7.ServletContext 파라미터


8.java:comp/env JNDI 애트리뷰트


9.System.getProperties() 자바 시스템 프로퍼티


10.OS 환경 변수


11.RandomValuePropertySource


12.JAR 밖에 있는 특정 프로파일용 application properties


13.JAR 안에 있는 특정 프로파일용 application properties


14.JAR 밖에 있는 application properties


15.JAR 안에 있는 application properties


16.@PropertySource


17.기본 프로퍼티 (SpringApplication.setDefaultProperties)


15번 (JAR 안에 있는 application properties) 가 수정되지 않는 대상인데, 배포 시 실행을 할 때, java -jar -Dspring.profiles.active=prod 과 같이 더 높은 우선순위인 4번(커맨드 라인 아규먼트)를 사용하면 해결된다.

📖 참고문서


[SPRING BOOT] 외부 설정 및 우선순위 (Externalized Configuration and priorities)

Spring Boot 외부설정 우선순위

profile
안녕하세요~! 백엔드 개발자 허승연 입니다 :)

0개의 댓글