個人博客:蘭陵笑笑生,歡迎瀏覽博客!java
上一章 SpringCloud基礎教程(三)-Eureka進階當中,咱們在對Eureka的有了基本的基礎認識之上,深刻的瞭解Eureka高可用集羣和其餘的生產環境中用到的一些配置。本章將開始瞭解分佈式環境下的配置中心。git
爲何須要配置中心,在單體的應用中,配置文件就能夠很好的解決配置問題。可是在微服務架構模式下,系統不可避免的被拆分了許多個微服務組件,若是仍是經過之前的方式,配置的工做量會很大。爲此,一個通用的分佈式的配置管理中心是必不可少的。Spring Cloud提供了另一個組件Spring Cloud Config。程序員
Spring Cloud Config提供了服務端和客戶端的支持,基於Spring環境,可以無縫的集成Spring,默認的實現是基於Git倉庫。固然也支持SVN,本地文件等,甚至自定義實現。web
這裏咱們使用Git做爲配置文件的存儲倉庫,首先創建Maven項目,並在Pom.xml文件中引入相關依賴。spring
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
建立ConfigServerApplicaition.java 類,使用@EnableConfigServer註解,表示容許該服務以HTTP形式對外提供配置管理服務:json
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; @SpringBootApplication @EnableConfigServer public class ConfigServerApplicaition { public static void main(String[] args) { SpringApplication.run(ConfigServerApplicaition.class, args); } }
添加applicaiton.yml,配置以下:bootstrap
spring: application: name: single cloud: config: server: git: uri: https://gitee.com/lnxxs/springCloudConfig.git password: username: search-paths: conf label: master
在這以前,事先建立Git倉庫,添加配置文件,master分支添加以下文件和內容:segmentfault
ConfigServer.properties: k1=master-default-v1 ConfigServer-dev.properties:k1=master-dev-v1 ConfigServer-test.properties:k1=master-test-v1 ConfigServer-pro.properties:k1=master-pro-v1
在服務啓動後,能夠基於HTTP請求訪問以下的URL進行配置信息的獲取,獲取的格式有以下幾種:架構
其中applicaiton是文件的名稱。如app
1) http://localhost:6001/ConfigServer-dev.properties
2) http://localhost:6001/master/ConfigServer-dev.properties :加載指定分支的屬性:
3) http://localhost:6001/ConfigServer/default :顯示默認的配置
{ "name":"ConfigServer", "profiles":[ "default" ], "label":null, "version":"f516174f308769468f1ac683cfeffa803a63c9af", "state":null, "propertySources":[ { "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer.properties", "source":{ "k1":"master-default-v1" } } ] }
4) http://localhost:6001/ConfigServer/dev :顯示默認和dev的信息
{ "name":"ConfigServer", "profiles":[ "dev" ], "label":null, "version":"f516174f308769468f1ac683cfeffa803a63c9af", "state":null, "propertySources":[ { "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer-dev.properties", "source":{ "k1":"master-dev-v1" } }, { "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer.properties", "source":{ "k1":"master-default-v1" } } ] }
5) http://localhost:6001/ConfigServer/test/master 顯示指定的分支的test和默認的配置
{ "name":"ConfigServer", "profiles":[ "test" ], "label":"master", "version":"f516174f308769468f1ac683cfeffa803a63c9af", "state":null, "propertySources":[ { "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer-test.properties", "source":{ "k1":"master-test-v1" } }, { "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer.properties", "source":{ "k1":"master-default-v1" } } ] }
若是經過以上的URL獲取到Git倉庫的配置信息,說明配置服務端正常。
接下來咱們建立一個SpringBoot應用做爲客戶端來讀取Config Server中提供的配置。(咱們開發的任何一個微服務組件均可以認爲是一個Config Client客戶端。)
新建ConfigClientApplication,java啓動類,並在項目文件pom.xml中添加依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--web依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
添加bootstrap.yml,注意這些配置必須是在bootstrap.yml中,配置才能生效,若是配置在applicaiton.yml中是沒有任何效果的。
spring: application: name: server-client cloud: config: label: master name: ConfigServer profile: test uri: http://localhost:6001/
建立ConfigClientApplication.java啓動類,並添加EnableAutoConfiguration註解,表示自動獲取項目中的配置變量。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableAutoConfiguration public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } }
建立控制器,測試獲取配置信息:
@RestController public class ValueController { @Value("${k1}") String value; @GetMapping("/get") public String getValue(){ return value; } }
調用接口測試,正確的獲取到了配置中心的信息:
在沒法鏈接Config Server的時候,咱們有時候要求客戶端須要啓動失敗,咱們能夠經過配置bootstrap配置項:
spring: cloud: config: fail-fast: true retry: initial-interval: 1000 max-attempts: 6 max-interval: 2000 multiplier: 1.1
若是咱們要求客戶端組件在Config Server不可用是,讓客戶端重試,那麼咱們也能夠經過設置:
spring: cloud: config: fail-fast: false
同時在客戶端的配置文件中引入spring-retry和aop依賴:
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
若是須要對Config Server的http請求進行帳號密碼控制,在服務端配置:
spring: application: name: single cloud: config: server: git: uri: https://gitee.com/lnxxs/springCloudConfig.git password: username: search-paths: conf label: master username: password: uri: http://localhost:6001/ enabled: true security: user: name: user password: pwd
注意用戶名、密碼的屬性是spring.security.user.name和spring.security.user.password
spring.cloud.config.username和spring.cloud.config.password服務端配置是沒有什麼做用,是客戶端用來配置用的
並在服務端的pom文件中引入security依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
咱們只須要將用戶名和密鑰複製並配置再每一個客戶端中bootstrap.xml中就能夠,客戶端是不須要引入security依賴的。
spring: application: name: server-client cloud: config: label: master profile: test uri: http://localhost:6001/ name: ConfigServer username: user password: pwd
在配置HTTP權限的時候,若是服務端在引入security以後,沒有配置用戶名和密碼,那麼服務端項目啓動時,就會隨機生成一個全局的密鑰。這裏咱們不使用隨機的密碼。若是配置了用戶名和密碼,那麼客戶端必須同時配置同樣的用戶名和加密的密鑰。
這一篇文章簡單的介紹了Spring Cloud ConfIf組件的使用,並結合git倉庫搭建了分佈式配置中心,實現了程序和配置的隔離,解耦編碼與環境之間的耦合,這是很是重要的,固然這樣的配置仍是存在肯定,在實際的生成環境中,全部的服務配置都依賴於配置中心,那麼若是配置中心出現宕機該怎麼辦,下一章咱們將繼續瞭解分佈式配置中心的集羣搭建.
以上就是本期的分享,你能夠關注本博客的#Spring Cloud基礎教程!#
還能夠關注公衆號: 程序員笑笑生,關注更多精彩內容!
本文由博客一文多發平臺 OpenWrite 發佈!
個人博客[蘭陵笑笑生] ( http://www.hao127.com.cn/),歡...!