Spring Cloud Config 配置中心

JiangYue發表於2018-04-24

Spring Cloud Config 用於為分散式系統中的基礎設施和微服務應用提供集中化的外部配置支援,分為服務端和客戶端。

服務端為分散式配置中心,是一個獨立的微服務應用;客戶端為分散式系統中的基礎設定或微服務應用,通過指定配置中心來管理相關的配置。

Spring Cloud Config 構建的配置中心,除了適用於 Spring 構建的應用外,也可以在任何其他語言構建的應用中使用。

Spring Cloud Config 預設採用 Git 儲存配置資訊,天然支援對配置資訊的版本管理。

構建配置中心

建立 Spring Boot 工程 config-server,然後按以下步驟完成配置中心的構建。

1.新增依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
複製程式碼

2.通過註解啟用配置中心

package com.ulyssesss.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}
複製程式碼

3.修改配置

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

# Git 倉庫位置
spring.cloud.config.server.git.uri=https://github.com/Ulyssesss/spring-cloud-config-example.git

# 倉庫路徑下相對搜尋位置,可配置多個
spring.cloud.config.server.git.search-paths=config

# 訪問 Git 倉庫的使用者名稱
spring.cloud.config.server.git.username=

# 訪問 Git 倉庫的密碼
spring.cloud.config.server.git.password=
複製程式碼

4.建立配置倉庫並提交修改

建立 Git 倉庫及 config 目錄,新增 ulyssesss.propertiesulyssesss-dev.properties,在配置中分別新增 from=default-1.0from=dev-1.0

建立 config-label-test 分支,將配置檔案中的版本號 1.0 修改為 2.0

提交修改並推送至遠端倉庫後啟動 config-server,可按照以下規則訪問配置資訊:

  • / {application} / {profile} [ / {label} ]
  • / {application} - {profile} . yml
  • / {label} / {application} - {profile} . yml
  • / {application} - {profile} . properties
  • / {label} / {application} - {profile} . properties

客戶端獲取配置

建立Spring Boot 工程 config-client ,按以下步驟編寫客戶端:

1.新增依賴

<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>
複製程式碼

2.增加配置

建立 bootstrap.properties,並增加配置中心的相關配置。

spring.application.name=ulyssesss
spring.cloud.config.profile=dev
spring.cloud.config.label=config-label-test
spring.cloud.config.uri=http://localhost:7001
複製程式碼

注意,以上屬性必須配置在 bootstrap.properties 中。

由於 Spring Boot 應用會優先載入應用 jar 包以外的配置,而通過 bootstrap.properties 對 config-server 的配置會使應用從 config-server 中獲取外部配置,優先順序比本地配置高。

3.建立控制器檢視配置

建立 ConfigClientController,通過訪問 http://localhost:8080/from 獲取配置。

package com.ulyssesss.configclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestConfigController {

    @Value("${from}")
    private String from;

    @GetMapping("from")
    public String from() {
        return from;
    }
}
複製程式碼

訪問 http://localhost:8080/from ,得到返回結果 from=dev-2.0 。修改配置中的 spring.cloud.config.profilespring.cloud.config.label ,重啟應用再次訪問連結會得到相應的配置資訊。

服務模式高可用配置

傳統模式的高可用不需要額外的配置,只需將所有的 config-server 例項全部指向同一個 Git 倉庫,客戶端指定 config-server 時指向上層負載均衡裝置地址。

服務模式通過將 config-server 納入 Eureka 服務治理體系,將 config-server 註冊成為一個微服務應用,客戶端通過服務名從服務註冊中心獲取配置中心的例項資訊。

1.新增服務端依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
複製程式碼

2.註解啟用服務發現功能

package com.ulyssesss.configserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}
複製程式碼

3.新增服務端配置

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

# Git 倉庫位置
spring.cloud.config.server.git.uri=https://github.com/Ulyssesss/spring-cloud-config-example.git

# 倉庫路徑下相對搜尋位置,可配置多個
spring.cloud.config.server.git.search-paths=config

# 訪問 Git 倉庫的使用者名稱
spring.cloud.config.server.git.username=

# 訪問 Git 倉庫的密碼
spring.cloud.config.server.git.password=

# 服務註冊中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
複製程式碼

4.新增客戶端依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
複製程式碼

5.客戶端啟用服務發現功能

package com.ulyssesss.configclient;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {

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

複製程式碼

6.修改客戶端配置

spring.application.name=ulyssesss
spring.cloud.config.profile=test
spring.cloud.config.label=config-label-test
#spring.cloud.config.uri=http://localhost:7001

# 服務註冊中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
# 啟用配置客戶端的服務發現功能
spring.cloud.config.discovery.enabled=true
# 指定配置中心的服務名
spring.cloud.config.discovery.service-id=config-server
複製程式碼

動態重新整理配置

有時需要對配置內容進行實時更新,Spring Cloud Config 通過 actuator 可實現此功能。

1.客戶端新增依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
</dependency>
複製程式碼

2.新增重新整理範圍註解

package com.ulyssesss.configclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RefreshScope
@RestController
public class TestConfigController {

    @Value("${from}")
    private String from;

    @GetMapping("from")
    public String from() {
        return from;
    }
}
複製程式碼

修改配置中 from 的值,提交到遠端倉庫,通過 post 方法訪問 http://localhost:8080/refresh 即可重新整理配置項的值。

注意,spring boot 1.5 以上會預設開啟安全認證,可通過一下配置關閉安全認證。

# 關閉安全認證
management.security.enabled=false
複製程式碼

原文地址

示例程式碼 歡迎 Star

相關文章