Spring Cloud Config Client 에서는 Config Server의 변경된 설정정보를 받기위해서는 actuator refresh 방법으로 설정정보를 갱신할 수 있다. 그런데 아무리 refresh를 해도 변경된 설정정보가 갱신이 안되는 장애를 겪었다. 아무리 살펴봐도 application.yml에 잘못적은 것이 아닌데 무엇이 문제인가 생각하다가 bootstrap 라이브러리때문인 것을 알게되었다.
🚀 상황
- Spring Cloud Config Server에서 변경된 설정정보를 받으려고 Actuator refresh API 호출함
- refresh API 호출하였지만 설정정보가 갱신되지 않음
🚀 문제해결
Spring Cloud Config 공식홈페이지에서 Spring Cloud Config Client 챕터를 살펴보다가 레거시가 되버린 bootstrap 라이브러리 때문이지 않을까 싶어서 dependencies에서 제거하니 갱신이 되었다.
🚀 정보
Spring Boot 2.4 버전 이전에는 Spring Cloud Bootstrap을 통해 Spring Cloud Config Server 설정을 관리할 수 있었다. 하지만 Spring Boot 2.4 버전 이후에는 application.yml 설정파일로도 Config Server 데이터를 가져올 수 있게 되면서 더 이상 쓰지않게 되었다.
Spring Boot 2.4 버전 이후에는 application.yml에 아래와 같이 설정하면 된다.
spring:
profiles:
active: dev #참조하고자 하는 yml파일명 뒷부분
cloud:
config:
name: ecommerce #참조하고자 하는 yml파일명 앞부분
config:
import: optional:configserver:http://localhost:8888 # Config Server의 URI
만약 ecommerce-dev.yml 파일과 ecommerce-prod.yml 파일이 있다고 할 때, 위와 같은 설정이면 ecommerce-dev.yml 파일을 Config Server로부터 가져와서 활성화하게 된다.
만약 레거시한 방법인 bootstrap을 사용하려면 공식 홈페이지에 나와있는 대로 설정해야한다. 공식 홈페이지에서는 `spring-cloud-starter-bootstrap` 스타터를 통해 활성화 해야 한다고 적혀있다. 속성은 아래와 같이 설정한다.
spring.cloud.bootstrap.enabled=true
이렇게 bootstrap이 활성화되면 bootstrap.yml 에 적어놨던 spring.cloud.config.uri 속성을 통해 Config Server에 연결된다.
간단하게 bootstrap.yml에는 아래와 같이 설정되어 있다.
spring:
cloud:
config:
uri: http://localhost:8888
name: 파일명
'Spring > Spring' 카테고리의 다른 글
스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 2편 (0) | 2023.12.18 |
---|---|
스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편 (1) | 2023.12.18 |
로컬에서 동일한 SpringBoot 서버를 여러개 실행하는 방법 (0) | 2023.06.02 |
SpringBoot 랜덤포트로 실행하기 (3) | 2023.05.15 |
선착순 쿠폰 발급을 위한 redis 분산락 (0) | 2023.05.11 |