Spring Cloud Config 多服務公共配置
阿新 • • 發佈:2018-11-28
一、問題描述
使用Spring Cloud Config作為配置中心,其它服務均從配置中心獲取配置資訊。有這樣一個場景,如果多個服務的配置存在公共配置(例如資料庫連線配置等),那麼可不可以只在公共的檔案中配置就可以呢?是可以的,下面提供兩種解決方案。
涉及到的服務如下:
服務名 | 埠號 | 說明 |
---|---|---|
eureka | 8080 | 服務註冊中心 |
config | 8090 | 配置中心 |
serviceA | 8091 | service a |
serviceB | 8092 | service b |
二、解決方案
2.1 方案1
這裡配置中心使用本地管理所有服務的配置檔案。在資源目錄下新建/serviceConfig
目錄,在該目錄下新建
aplication.properties
,serviceA-dev.properties
和serviceB-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.properties
,Spring 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']]]