2020. 4. 29. 20:50ㆍWeb/Spring
오늘 다루어볼 내용은 spring application.yaml(properties)파일들의 로드 규칙 및 순서이다. 기본적인 내용일수는 있겠지만 필자는 이번에 해당 순서의 중요성을 다시 한번 알게되서 한번더 정리해보려고 한다.
위 링크를 보면 PropertySource의 적용 순서가 나와있다. 우리가 신경 쓸 것은 application.properties와 application-{profiles}.properties의 순서이다. 위 링크에서는 application-{profiles}.properties가 더 우선 순위를 갖는다고 이야기하고 있다. 그 말은 무엇일까? 아래 간단히 application.properties 파일을 확인해보자.
#application.yaml
spring:
application:
name: name-1
#application-dev.yaml
spring:
application:
name: name-2
과연 위 yaml파일들을 모두 적용하고 나서 아래 코드를 실행한다면 어떤 값이 출력될까? 실행할때 VM option에
"-Dspring.profiles.active=dev"
을 넣어서 run 해야한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@Slf4j
@RestController
@SpringBootApplication
public class JenkinsSampleApplication implements CommandLineRunner {
@Value("${spring.application.name}")
private String appName;
public static void main(String[] args) {
SpringApplication.run(JenkinsSampleApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info(appName);
}
}
|
cs |
결과는 "name-2"가 출력된다. 그 말은 application-{profiles}.yaml이 우선 적용이 된다는 뜻이다. 그렇다면 아래와 같은 config가 있다면 어떨까?
#application.yaml
spring:
application:
name: name-1
#application-dev.yaml
spring:
profiles:
include: dev-common
application:
name: name-2
#application-dev-common.yaml
spring:
application:
name: name-3
출력결과는 "name-3"이다. 그 말은 application-dev.yaml에서 include한 application-dev-common.yaml이 가장 큰 우선순위를 갖는 것이다.
#application.yaml
spring:
profiles:
include: dev-common
application:
name: name-1
#application-dev.yaml
spring:
application:
name: name-2
#application-dev-common.yaml
spring:
application:
name: name-3
위 파일은 application-dev-common.yaml파일을 application.yaml에 include하였다. 이때 결과는 어떻게 될것인가? "name-2"를 출력할 것이다. 그 이유는 application.yaml에서 include했지만 application-dev.yaml이 더 우선순위를 갖기 때문이다. 즉, include된 설정값이 가장 우선순위를 갖기 위해서는 application-{profiles}.yaml에 include해야한다.
(만약 application-{profiles}.yaml이 없었다면 application-dev-common.yaml의 설정인 "name-3" 설정이 적용이 될것이다.)
해당 규칙들을 잘 활용해서 관리하기 쉽게 설정값들을 유지하면 좋을 것 같다. 여기까지 간단하게 spring application 설정의 적용 규칙 및 순서에 대해 다루어보았다.
'Web > Spring' 카테고리의 다른 글
Spring Data - 여러 spring data module을 사용할때 레퍼런스 (0) | 2020.06.25 |
---|---|
Springboot - reactive mongo driver 사용시 ClusterSettings 시 유의사항 (0) | 2020.05.15 |
Springboot - Spring webflux handler test(웹플럭스 핸들러 테스트), WebTestClient (0) | 2020.03.20 |
Springboot - @CacheEvict 사용시 주의점, Spring cache(@Cacheable,@CacheEvict) (1) | 2020.03.03 |
Springboot - junit을 이용한 DB관련 테스트 작성하는 방법, embedded mongo를 이용한 테스트 (1) | 2020.03.01 |