Spring Boot - using external yaml file (spring.config.import)
spring boot 에서 application.properties 나 application.yaml 파일 이용 시
합리적인 값 재정의를 허용하도록 설계된 매우 특정한 PropertySource 순서를 사용하며
속성의 우선 순위는 아래와 같다.
1. Command line arguments.
2. JNDI attributes from java:comp/env.
3. Java System properties (System.getProperties()).
4. OS environment variables.
5. A RandomValuePropertySource that only has properties in random.*.
6. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)
7. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
8. Application properties outside of your packaged jar (application.properties and YAML variants).
9. Application properties packaged inside your jar (application.properties and YAML variants).
10. @PropertySource annotations on your @Configuration classes.
11. Default properties (specified using SpringApplication.setDefaultProperties).
이전 프로젝트에서는 @PropertySource 를 이용해서
@PropertySource(value = {"file:"+Constant.YAML_DEV, "file:"+Constant.YAML_PROD}, ignoreResourceNotFound = true, factory = YamlPropertySourceFactory.class)
와 같이 설정하여 처리 했었다.
개발 시 application.yaml의 spring.prifiles.active 를 dev mode 로 하고 YAML_DEV는 PC 의 특정 Path를 지정했다. ignoreResourceNotFound 옵션을 통해 해당 파일이 없으면 다음 파일인 YAML_PROD 를 찾아 설정되도록 처리 했다.
이번에 진행하고 있는 Project 에서는 더 쉬운 방법으로 spring.config.import 를 사용하기로 했다.
application 의 resources 에 위치하고 있는 application.yaml 을 default 로 하되
설정값이 변경될 수 있는 항목들에 대해서는 외부 .yaml 파일을 이용하기로 하고
개발 시 에는 C:/dev/application.yaml 파일을 참고하고 운영은 /application_path/conf/application.yaml 을
이용하도록 하려면 아래와 같이 설정하면 된다.
spring:
profiles:
active: prod
config:
import:
- optional:file:/yhkim/.conf/file_analyzer.yaml
- optional:file:C://dev/file_analyzer.yaml