Spring Framework/Spring Cloud Config

Spring Cloud Config Client override

Junuuu 2024. 2. 2. 00:01

개요

이전 글인 "Spring Cloud Config Server에 문제가 생기면 어떻게 될까?" 에서는 Client application.yml과 Config Server의 설정값이 충돌 나면 Config Server의 값이 적용되는 것을 확인해 보았습니다.

 

이때 Client application.yml이 우선순위를 가지게 하려면 어떻게 해야 할까요?

 

 

Client application.yml 이 우선순위를 가지게 하고 싶은데 어떻게 해야할까요?

 

 

 

기본적으로 spring.config.import: optional:~ 을 사용할 경우에는 외부 설정값이 최우선으로 적용됩니다.

spring:  
  config:
    import: optional:configserver:http://localhost:8088

 

 

Git Repository yml 설정에 다음 옵션에 존재하는 경우 Client가 우선순위를 가지게 할 수 있습니다.

spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true

이때 주의해야 할 점은 Spring Cloud Config Server yml에 해당 옵션을 계속 추가하면서 테스트하는 삽질을 수행했습니다.

 

 

https://github.com/Junuu/spring-study/blob/main/testapplication-local.yml

꼭 Git Repository의 설정에 해당 옵션이 추가되어야 합니다.

 

또한 공식문서를 살펴보면 override를 위해서는 bootstrap config가 구성되어야 한다고 안내합니다.

https://docs.spring.io/spring-cloud-config/docs/4.0.4/reference/html/#_using_bootstrap_to_override_properties

해당 글에서는 Git Reposiotry에 설정에 추가하라고 하지 않아 굉장히 혼란스러웠습니다.

다음글에서는 해당내용을 Issue에 올려보고 그 내용을 공유해 보겠습니다.

 

https://cloud.spring.io/spring-cloud-static/spring-cloud.html#overriding-bootstrap-properties

반면에 또 다른 문서에서는 "remote"라고 명시적으로 선언되어 있습니다.

 

 

https://docs.spring.io/spring-cloud-config/docs/4.0.4/reference/html/#config-first-bootstrap

bootstrap의 의존성과 bootstrap.yml의 설정이 필요함을 명시해 두었습니다.

 

bootstrap을 위해서 gradle 의존성을 추가합니다.

implementation("org.springframework.cloud:spring-cloud-starter-bootstrap")

 

또한 boostrap.yml 에 해당 설정이 필요합니다.

spring:
  cloud:
    config:
      uri: http://localhost:8088

 

 

이제 endpoint를 호출하여 설정값을 불러오겠습니다.

client가 가지는 설정값으로 갱신됨을 확인할 수 있습니다.

 

 

동일한 구성으로 profile만 dev로 바꾸어 호출하면 다음과 같은 설정값을 불러옵니다.

client가 가지는 설정값으로 갱신되지 않음을 확인할 수 있습니다.

 

 

 

참고자료

https://docs.spring.io/spring-cloud-config/docs/4.0.4/reference/html/#config-first-bootstrap

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.files.importing

https://docs.spring.io/spring-cloud-config/docs/4.0.4/reference/html/#_using_bootstrap_to_override_properties

https://cloud.spring.io/spring-cloud-static/spring-cloud.html#overriding-bootstrap-properties