1、爲何要統一管理管理微服務配置html
在微服務框架中,微服務的配置管理通常有一下需求:java
一、集中管理配置git
一個使用微服務架構的應用系統可能會包含成百上千個微服務,集中管理配置很是用必要。spring
二、不一樣環境不一樣配置bootstrap
如:數據源配置在不一樣的環境(開發、測試、預發佈、生產等)中是不一樣的。緩存
三、運行期可動態調整服務器
如:可根據各個微服務的負載狀況,動態調整數據源鏈接池大小,而且在調整配置時不中止微服務。架構
四、配置修改後可自動更新app
如:配置內容發送變化,微服務可以自動更新配置。框架
對於微服務架構而言,一個通用的配置管理機制是必不可少的,常見作法是使用配置服務器管理配置。
2、Spring Cloud Config簡介
Spring Cloud Config爲分佈式系統外部化配置提供了服務端和客戶端的支持,它包括Config Server和Config Client兩部分。因爲Config Server和Config Client都實現了對Spring Environment和PropertySource抽象的映射,所以,Spring Cloud Config很是適合Spring應用。
Config Server是一個可橫向擴展、集中式的配置服務器,它用於集中管理應用程序各個環境下的配置,默認使用Git存儲配置的內容(也能夠屬於SVN),所以能夠很方便的實現對配置的版本控制與內容審計。
Config Client是Config Server的客戶端,用於操做存儲在Config Server中的配置屬性。全部的微服務在啓動時,會請求Config Server以獲取所須要的配置屬性,而後緩存這些屬性以提升性能。
3、編寫Config Server與Config Client
3.一、Config Server
a、在gti上新建一個項目,如spring-cloud-config,而後新建幾個配置文件,如:
裏面的內容這裏寫的:
profile: 環境-1.0
如spring-cloud-demo-test.yml中是profile:test-1.0
爲了測試版本控制,這裏拉一個分支,如:v2.0
裏面的內容這裏寫的:
profile: 環境-2.0
b、新建一個工程,如config-server,添加以下依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
c、編寫啓動類,添加@EnableConfigServer註解
package com.liuy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; /** * config服務啓動類 * @description config服務啓動類 * @author luis * @version 1.0 * @date:2017年8月29日下午5:09:14 */ @SpringBootApplication @EnableConfigServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
d、編寫application.yml配置文件
server: port: 5020 spring: application: name: config-server cloud: config: server: git: uri: https://git.oschina.net/wadjz/spring-cloud-config.git username: 用戶名 password: 密碼
這樣,一個config Server就行了,咱們可使用Config Server的端點獲取配置文件的內容。端點與配置文件的映射規則以下:
/{application}/{profile}[/{lable}] /{application}-{profile}.yml /{lable}/{application}-{profile}.yml /{application}-{profile}.properties /{lable}/{application}-{profile}.properties
以上端點均可以映射到{application}-{profile}.yml這個配置文件,{application}表示微服務的名稱,{profile}表示環境,{lable}表示對應git倉庫的分支,默認master。
按照以上規則,使用以下URL能訪問到GIT倉庫裏的master的spring-cloud-demo-test.yml
http://localhost:5020/spring-cloud-demo-test.yml
http://localhost:5020/v2.0/spring-cloud-demo-test.yml
下面URL可獲取應用名稱、項目profile等配置文件的詳情:
http://localhost:5020/spring-cloud-demo/test
http://localhost:5020/spring-cloud-demo/test/v2.0
3.二、Config Client
a、建立一個項目,如config-client,添加如下依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>
b、編寫啓動類
package com.liuy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * config客戶端啓動類 * @description config客戶端啓動類 * @author luis * @version 1.0 * @date:2017年8月29日下午5:09:14 */ @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
c、編寫application.yml配置文件
server: port: 5021
d、編寫bootstrap.yml配置文件
spring: application: # 對應config Server所獲取的配置文件的{application} name: spring-cloud-demo cloud: config: # config Server的地址 uri: http://localhost:5020/ # profile對應config Server所獲取的配置文件的{profile} profile: dev # 指定git的分支,對應config Server所獲取的配置文件的{label} label: master
注意:這個必須配置在bootstrap.yml配置文件中。
e、編寫Controller
@RestController public class ConfigClientController { @Value("${profile}") private String profile; @GetMapping("/profile") public String hello() { return this.profile; } }
經過註解@Value("${profile}"),綁定GIT倉庫配置文件中的profile屬性。