1.介紹
Spring Cloud Config 是 Spring Cloud 團隊創建的一個全新項目,用來爲分佈式系統中的基礎設施和微服務應用提供集中化的外部配置支持,它分爲服務端與客戶端兩個部分。其中服務端也稱爲分佈式配置中心,它是一個獨立的微服務應用,用來連接配置倉庫併爲客戶端提供獲取配置信息、加密 / 解密信息等訪問接口;而客戶端則是微服務架構中的各個微服務應用或基礎設施,它們通過指定的配置中心來管理應用資源與業務相關的配置內容,並在啓動的時候從配置中心獲取和加載配置信息。Spring Cloud Config 實現了對服務端和客戶端中環境變量和屬性配置的抽象映射,所以它除了適用於 Spring 構建的應用程序之外,也可以在任何其他語言運行的應用程序中使用。由於 Spring Cloud Config 實現的配置中心默認採用 Git 來存儲配置信息,所以使用 Spring Cloud Config 構建的配置服務器,天然就支持對微服務應用配置信息的版本管理,並且可以通過 Git 客戶端工具來方便的管理和訪問配置內容。當然它也提供了對其他存儲方式的支持,比如:SVN 倉庫、本地化文件系統。
2.Config的配置和使用
2.1新建一個server端
2.2 添加依賴和配置
依賴:
配置文件:
Spring Cloud Config 也提供本地存儲配置的方式。我們只需要設置屬性 spring.profiles.active=native,Config Server 會默認從應用的 src/main/resource 目錄下檢索配置文件。雖然 Spring Cloud Config 提供了這樣的功能,但是爲了支持更好的管理內容和版本控制的功能,還是推薦使用 Git 的方式。
如果Git倉庫爲公開倉庫,可以不填寫用戶名和密碼,如果是私有倉庫需要填寫,
可以如下配置:
spring.cloud.config.server.git.username:訪問 Git 倉庫的用戶名
spring.cloud.config.server.git.password:訪問 Git 倉庫的用戶密碼
2.3 添加註解支持
在啓動類上添加@EnableConfigServer註解,激活對配置中心的支持
2.4 啓動和測試
首先測試一下Server端能否讀到github上的配置信息,在github上創建一個文件夾config-file,裏面創建三個配置文件:config-client-dev.yml, config-client-pro.yml, config-client-test.yml。都添加一個屬性config.demo,分別添加屬性值:dev,pro,test
啓動服務,訪問http:localhost:7006/config-client/dev。返回信息如下:
上述的返回的信息包含了配置文件的位置、版本、配置文件的名稱以及配置文件中的具體內容,說明 Server 端已經成功獲取了 Git 倉庫的配置信息。如果直接查看配置文件中的配置信息可以訪問:http:localhost:7006/config-client-dev.yml
返回:
倉庫中的配置文件會被轉換成 Web 接口,訪問可以參照以下的規則:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
上面的 URL 會映射 {application}-{profile}.yml 對應的配置文件,其中 {label} 對應 Git 上不同的分支,默認爲 master。以 config-client-dev.yml 爲例子,它的 application 是 config-client,profile 是 dev。
3.獲取配置中心信息
3.1 新建一個client端
3.2 添加依賴和配置
添加依賴:
配置文件需要兩個:application.yml和bootstrap.yml,配置分別如下
application.yml
bootstrap.yml
特別注意:上面這些與 Spring Cloud Config 相關的屬性必須配置在 bootstrap.yml 中,config 部分內容才能被正確加載。因爲 config 的相關配置會先於 application.yml,而 bootstrap.yml 的加載也是先於 application.yml。
3.3 添加註解支持
啓動類不用修改
3.4啓動和測試
添加一個Controller類,用來測試是否能獲取到Server端的信息
啓動服務,訪問:http:localhost:7007/info
正常返回:
這就說明config-client從config-server獲取了config.demo的屬性,而config-server是從git倉庫讀取的。