Spring Cloud Config爲分佈式系統中的外部配置提供服務器和客戶端支持。使用Config Server,您能夠在全部環境中管理應用程序的外部屬性。客戶端和服務器上的概念映射與Spring Environment和PropertySource抽象相同,所以它們與Spring應用程序很是契合,但能夠與任何以任何語言運行的應用程序一塊兒使用。隨着應用程序經過從開發人員到測試和生產的部署流程,您能夠管理這些環境之間的配置,並肯定應用程序具備遷移時須要運行的一切。服務器存儲後端的默認實現使用git,所以它輕鬆支持標籤版本的配置環境,以及能夠訪問用於管理內容的各類工具。很容易添加替代實現,並使用Spring配置將其插入。html
以上內容爲官方直譯
1. pom.xml
中添加Maven依賴java
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-client--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <!-- Spring Cloud Config Server --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2. 添加註解支持git
@SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
3. application.yml
配置github
spring: application: name: config-server cloud: config: enabled: true server: git: # git倉庫地址 uri: https://github.com/kevin-yang-work/SpringcloudConfig/ # 配置倉庫路徑下的相對搜索位置,能夠配置多個 search-paths: respo username: password: # svn: # uri: http://svn.kevin.com/svn/repos/config-repos/ # # 客戶端來選擇 ## default-label: trunk # username: kevin # password: kevin # search-paths: demo name: config-client # 倉庫的分支,默認爲master label: master # profiles: # # 若是使用subversion必須加 # include: subversion server: port: 8888 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
Git倉庫信息根據實際狀況進行填寫
SVN倉庫配置見註釋內容,後續作詳細說明
這裏咱們將配置服務中心
註冊到Eureka
,實現配置服務中心的高可用
至此springCloud配置中心服務端配置完畢。web
4. 運行概覽spring
咱們在遠程倉庫中添加一個config-client-dev.properties的文件,內容以下:json
foo = foo version 3
其中config-client
對應到客戶端spring.cloud.config.name
屬性,dev
對應到客戶端spring.cloud.config.profile
屬性
啓動程序,訪問http://localhost:8888/config-...後端
{"name":"config-client","profiles":["dev"],"label":null,"version":"dd5e327223129b3d6d73a5e87b8cdf0a4031619c","state":null,"propertySources":[{"name":"https://github.com/kevin-yang-work/SpringcloudConfig//respo/config-client-dev.properties","source":{"foo":"foo version 3"}}]}
返回以上結果證實配置服務中心可從遠程倉庫獲取到配置信息
HTTP具備如下格式的資源(做爲客戶端訪問格式說明):瀏覽器
/{name}-{profiles}.properties /{name}-{profiles}.yml /{label}/{name}-{profiles}.properties /{label}/{name}-{profiles}.json /{name}-{profiles}.json /{label}/{name}-{profiles}.yml
其中name
做爲spring.cloud.config.name
注入,profiles
做爲激活的配置文件
或者spring.cloud.config.name
注入,label
是可選的git標籤(默認爲master)
1. pom.xml
引入Maven依賴服務器
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-client--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <!-- Spring Cloud Config Client--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2. application.yml
配置
spring: application: name: config-client cloud: config: name: config-client label: master profile: dev # uri: http://localhost:8888/ discovery: enabled: true service-id: config-server server: port: 8882 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
這裏咱們將服務端和客戶端都註冊到服務註冊中心(Eureka)
,那麼能夠經過discovery
下的屬性進行配置服務中心
註冊,若是不使用服務註冊中心,指明spring.cloud.config.uri
屬性爲配置服務中心地址便可
至此配置服務中心客戶端配置完畢。
4. 運行概覽
添加REST接口,從配置中心讀取foo屬性。
@SpringBootApplication @RestController public class ConfigClientApplication { public static void main(String[] args) { SpringApplication.run(ConfigClientApplication.class, args); } @Value("${foo}") String foo; @RequestMapping(value = "/hi") public String hi(){ return foo; } }
啓動程序訪問http://localhost:8881/hi,結果以下:
foo version 3
上述實現客戶端從配置中心讀取配置文件中的屬性,可是若是配置文件屬性有變動,如何將更改應用到全部的客戶端呢?這就是此節須要講述的內容。咱們經過Spring Cloud Bus實現通知配置文件的變動。
1. pom.xml
引入Maven依賴
<dependency> <!-- 消息服務總線 通知微服務架構的配置文件的更改 --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <!-- 配置重試機制須要 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <!-- 配置重試機制須要 --> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>
消息服務總線
須要actuator
的支持,這裏還加入了重試機制
的依賴,若是不須要能夠忽略
2. application.yml
的變動
spring: rabbitmq: host: rabbitmq.kevin.com port: 5672 username: rabbitmq password: rabbitmq management: endpoints: web: base-path: / exposure: include: "*"
這裏消息服務總線咱們須要rabbitMq的支持,請自行配置rabbitMq環境
一樣對於actuator
,咱們在這裏暴露全部端口,如應用到生產,請謹慎選擇,這裏用到的endpoint
爲bus-refresh
,用於配置文件的更新
注意:management.endpoints.web.base-path定義監控根路徑,默認爲:/actuator
3. 運行概覽
啓動一個eureka-server,一個confg-server,兩個config-client,端口爲:8881
,8882
訪問 http://localhost:8881/hi 瀏覽器顯示:
(或訪問 http://localhost:8882/hi)
foo version 3
這時咱們去代碼倉庫將foo的值改成「foo version 4」,即改變配置文件foo的值。若是是傳統的作法,須要重啓服務,才能達到配置文件的更新。此時,咱們只須要發送post請求:http://localhost:8881/bus-refresh,你會發現config-client會從新讀取配置文件