1. 程式人生 > >spring-cloud-config 多服務共享公共配置的解決方案總結,太全了!

spring-cloud-config 多服務共享公共配置的解決方案總結,太全了!

### 問題描述 我們公司的專案是基於SpringCloud開發的微服務,用到了Spring-Cloud-Config作為微服務統一的配置中心,可以將散落在各個服務的配置進行統一配置管理。 雖然配置中心將各個應用的配置檔案進行了統一管理, 但是涉及到的一些公共配置,比如資料庫連線,redis連線,ftp連線等,依然還散落在各個應用的配置檔案中,並沒有抽取,我們需要根據環境的不同,而動態修改它們,非常難以維護。導致每次涉及修改這些公共配置,就非常老火。 所以想到了利用公共檔案方法,現在在這裡簡單闡述一下如何配置。(下面例子Spring-Cloud-Config-Server都是使用本地配置方式)。 經過網上查閱資料,大部分都是採用**方法一**進行配置的,那麼我提供了一個**方式二**配置,也許會讓你眼前一亮,然後留下你的想法,如果是你去選擇,會選擇哪個方法呢? ### 方法一: 首先在配置中心的 `config/` 目錄下建立一個公共配置檔案`common.yml`, 然後在各個應用下的 `bootstrap.yml` 檔案中 `spring.cloud.config.name` 這裡去配置多個配置檔名。 例如: service-a 客戶端的 bootstap.yml: ```yml spring: cloud: config: name: service-a, common ``` service-b 客戶端的 bootstap.yml: ```yml spring: cloud: config: name: service-b, common ``` ### 方法二:(比較推薦) 我們還記得springboot單體應用的時候, 是如何抽離公共配置呢?答案是用spring.profiles.include 進行引用其他公共配置檔案。而且它的檔案命名有個特點,就是必須是`application-`開頭的配置檔案。 我們也會去想,像spring-cloud-config這樣的配置集中化,這樣的配置會生效嗎? 例如: 首先,我們在 `config/` 目錄下建立 `application-common-dev.yml` 配置檔案 然後分別修改 `service-a` 和 `service-b` 在 `config/` 目錄下的配置檔案,配置如下: `service-a` 客戶端的 `service-a-dev.yml` ```yml spring: application: name: service-a #公共配置檔案 profiles: include: common-dev ``` `service-b` 客戶端的 `service-b-dev.yml` ```yml spring: application: name: service-b #公共配置檔案 profiles: include: common-dev ``` 分別啟動各自的服務,就可以看到服務啟動成功。 那麼,這兩種方式那種更好一些呢。 方法一: 缺點:如果有新加的公共配置檔案,需要去每個服務的bootstrap.yml都去修改一下。並且需要重新發布jar包。 方法二: 優點:配置可以外部化,而且修改配置檔案,不需要單獨釋出jar包。 關注 + 收藏, 分享更多的開發實戰