1. 程式人生 > >Spring Cloud Config 多服務公共配置

Spring Cloud Config 多服務公共配置

一、問題描述

使用Spring Cloud Config作為配置中心,其它服務均從配置中心獲取配置資訊。有這樣一個場景,如果多個服務的配置存在公共配置(例如資料庫連線配置等),那麼可不可以只在公共的檔案中配置就可以呢?是可以的,下面提供兩種解決方案。

涉及到的服務如下:

服務名 埠號 說明
eureka 8080 服務註冊中心
config 8090 配置中心
serviceA 8091 service a
serviceB 8092 service b

二、解決方案

2.1 方案1

這裡配置中心使用本地管理所有服務的配置檔案。在資源目錄下新建/serviceConfig目錄,在該目錄下新建
aplication.propertiesserviceA-dev.propertiesserviceB-dev.properties檔案。aplication.properties用來存放公共配置。

在serviceA和serviceB中分別新增如下配置:

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.profile=dev
spring.cloud.config.failFast=true

注意:
存放所有服務配置檔案的目錄不能命名為config。因為配置中心在啟動的時候會優先讀取config子目錄下的application.propertiesSpring Boot提供的SpringApplication類會搜尋並載入config目錄下的application.properties檔案來獲取配置屬性值。

2.2 方案2

可以新增spring.cloud.config.name來配置多個檔名。如果公共配置檔案的名稱為common.properties,那麼在serviceA中的配置如下:

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.profile=dev
spring.cloud.config.failFast=true
spring.cloud.config.name=common,serviceA

三、測試

不管是哪種方案,待服務啟動後,你看到類似如下日誌,證明配置生效

CompositePropertySource [name='config', propertySources=[MapPropertySource [name='classpath:/serviceConfig/serviceA-dev.properties'], MapPropertySource [name='classpath:/serviceConfig/application.properties']]]