(八)統一配置中心-Config

對於配置的重要性,我想我不用進行任何強調,你們均可以明白其重要性。在普通單體應用,咱們常使用配置文件(application(*).properties(yml))管理應用的全部配置。這些配置文件在單體應用中很是勝任其角色,並無讓咱們感受到有頭疼的地方。但隨着微服務框架的引入,微服務數量就會在咱們產品中不斷增長,以前咱們重點考慮的是系統的可伸縮、可擴展性好,但隨之就是配置管理的問題就會一一暴露出來。起初微服務器各自管各自的配置,在開發階段並沒什麼問題,但到了生產環境管理就會很頭疼,若是要大規模更新某項配置,困難就可想而知。java

爲此,在分佈式系統中,Spring Cloud提供一個Config子項目,該項目核心就是配置中心,經過一個服務端和多個客戶端實現配置服務。咱們可以使用配置服務器集中的管理全部服務的各類環境配置文件。配置服務中心默認採用Git的方式進行存儲,所以咱們很容易部署修改,並能夠對環境配置進行版本管理。git

Spring Cloud Config具備中心化、版本控制、支持動態更新和語言獨立等特性。其特色是:web

  • 提供服務端和客戶端支持(Spring Cloud Config Server和Spring Cloud Config Client);
  • 集中式管理分佈式環境下的應用配置;
  • 基於Spring環境,實現了與Spring應用無縫集成;
  • 可用於任何語言開發的程序;
  • 默認實現基於Git倉庫(也支持SVN),從而能夠進行配置的版本管理;

Spring Cloud Config的結構圖以下:spring

 
Config-結構圖

從圖中能夠看出Spring Cloud Config有兩個角色(相似Eureka): Server和Client。Spring Cloud Config Server做爲配置中心的服務端承擔以下做用:json

  • 拉取配置時更新Git倉庫副本,保證是配置爲最新;
  • 支持從yml、json、properties等文件加載配置;
  • 配合Eureke可實現服務發現,配合Cloud Bus(這個後面咱們在詳細說明)可實現配置推送更新;
  • 默認配置存儲基於Git倉庫(能夠切換爲SVN),從而支持配置的版本管理.

而對於,Spring Cloud Config Client則很是方便,只須要在啓動配置文件中增長使用Config Server上哪一個配置文件便可。bootstrap

 

構建Config-Server(idea)

pom以下服務器

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-server</artifactId>
</dependency>

啓動類app

@SpringBootApplication
@EnableConfigServer
public class SpringCloundConfigDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloundConfigDemoApplication.class, args);
	}

}

  其中增長了@EnableConfigServer框架

application.properties分佈式

server.port=8890
spring.application.name=server-config


spring.cloud.config.server.git.uri=https://gitee.com/skyLogin/SpringCloundConfigGit.git
spring.cloud.config.server.git.username=登陸名
spring.cloud.config.server.git.password=密碼

  這裏最重要的是須要配置Git倉庫的地址及登陸用戶名和口令。

 

咱們在 SpringCloundConfigGit倉庫中提交以下文件
user.properties
project.name = sky

  
user-dev.properties

project.description = dev-description

啓動測試

{
	"name": "user",
	"profiles": ["dev"],
	"label": null,
	"version": "9bc698347dcb4e82e1c8fc631d7409cc3f0e6a65",
	"state": null,
	"propertySources": [{
		"name": "https://gitee.com/skyLogin/SpringCloundConfigGit.git/user-dev.properties",
		"source": {
			"project.description": "dev-description"
		}
	}, {
		"name": "https://gitee.com/skyLogin/SpringCloundConfigGit.git/user.properties",
		"source": {
			"project.name": "sky"
		}
	}]
}

這裏能夠看到,咱們提交到Git中的配置文件已經可以被server-config正確的讀取到。

 

構建config-client

config-client能夠是任何一個基於Spring boot的應用,這裏爲了講解方便,咱們構建一個很是簡單的web工程。

 

咱們的config-client項目須要引入對spring-cloud-starter-config的依賴,以下:

 

pom

<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>

啓動類

一個標準的Spring Boot啓動類:

@SpringBootApplication
public class SpringCloundConfigClientDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringCloundConfigClientDemoApplication.class, args);
	}

}

編寫測試Controller

這個測試Controller主要就是驗證咱們能夠從Git倉庫中獲取配置內容。

@RestController
public class ConfigController {
    @Value("${project.name}")
    String name;

    @Value("${project.description}")
    String description;

    @RequestMapping("/config/get/message")
    public String getMessage() {
        return name + " - " + description;
    }
}

編寫配置文件

這裏編寫的配置文件名稱爲:bootstrap.properties,內容以下:

server.port=8891

spring.application.name=user
spring.cloud.config.profile=dev
spring.cloud.config.uri= http://localhost:8890/

  

定義了微服務的名稱和profile以及配置服務器的地址。

注意: 這些配置不可以配置在application.properties文件中,由於在Spring Boot啓動時有引導上下文和應用上下文的概念,只有將配置服務器信息定義在引導上下文中,纔可以從配置服務器中獲取到配置信息。不然,服務啓動時會報找不到變量定義的錯誤。

啓動測試

說明,咱們的config-client已經成功從server-config上獲取到配置的數據了。

 
 
連接:https://www.jianshu.com/p/997600098e6c 來源:簡書
相關文章
相關標籤/搜索