目錄
- 一 簡介
-
- 面臨的問題
- 介紹
- SpringCloud Config分為服務端和用戶端兩部分。
- 二 服務端demo
-
- 配置檔案部分
- 建立服務端項目
- 配置讀取規則
- 三 用戶端demo
-
- 步驟
- 測試
- bootstrap.yml
- 參考
一 簡介
面臨的問題
微服務意味着要将單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,是以系統中會出現大量的服務。由于每個服務都需要
必要的配置資訊
才能運作,是以一套
集中式的、動态的配置管理
設施是必不可少的。SpringCloud提供了ConfigServer來解決這個問題,我們每一個微服務自己帶着一個application.yml,上百個配置檔案的管理
介紹
SpringCloud Config
為微服務架構中的微服務提供
集中化的外部配置支援
,配置伺服器為各個不同微服務應用的所有環境提供了一個
中心化的外部配置
。
SpringCloud Config分為服務端和用戶端兩部分。

- 服務端也稱為分布式配置中心,它是一個
,用來連接配接配置伺服器并為用戶端提供擷取配置資訊,獨立的微服務應用
通路接口加密/解密資訊等
- 用戶端則是通過
來管理應用資源,以及與業務相關的配置内容,并在指定的配置中心
從配置中心擷取和加載配置資訊。配置伺服器預設采用git來存儲配置資訊,這樣就有助于對環境配置進行版本管理,并且可以通過git用戶端工具來友善的管理和通路配置内容。啟動的時候
二 服務端demo
配置檔案部分
- 用自己的GitHub賬号在GitHub上建立一個名為microservicecloud-config的新Repository(這裡為了逼真,用了private的倉庫)
SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考 - 本地檢出
SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考 - 建立一個目錄app1,然後裡面建立一個application.yml(
)儲存格式必須為UTF-8
server:
port: 8201
spring:
profiles: dev
application:
name: microservicecloud-config-client
testmsg: devmsback
---
server:
port: 8202
spring:
profiles: test
application:
name: microservicecloud-config-client
testmsg: testmsg
# 請儲存為UTF-8格式
- 送出并推送修改到github
建立服務端項目
- 建立Module子產品microservicecloud-config-3344
- pom依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>microservicecloud</artifactId>
<groupId>com.zyc.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>microservicecloud-config-3344</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
</project>
- yml配置
server:
port: 3344
spring:
application:
name: microservicecloud-config
cloud:
config:
server:
git:
uri: https://github.com/zycCome/microservicecloud-config.git
search-paths: app1 # 目錄名
username: xxx
password: xxx
label: master
eureka:
client: #用戶端注冊進eureka服務清單内
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: microservicecloud-config-1
prefer-ip-address: true #通路路徑可以顯示IP位址
hostname: config1.com
- 啟動類
package com.zyc.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class Config_3344_StartSpringCloudApp
{
public static void main(String[] args)
{
SpringApplication.run(Config_3344_StartSpringCloudApp.class,args);
}
}
- 測試效果:1.http://localhost:3344/application-dev.yml 2.http://localhost:3344/application-test.yml
SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考
小結:成功實作了用SpringCloud Config通過GitHub擷取配置資訊
配置讀取規則
三 用戶端demo
步驟
- 建立項目microservicecloud-config-client-3355
- 添加bootstrap.yml檔案(
)說明在下一節
spring:
cloud:
config:
name: microservicecloud-config-client #需要從github上讀取的資源名稱,注意沒有yml字尾名
profile: dev #本次通路的配置項
label: master
# uri: http://config-3344.com:3344 #本微服務啟動後先去找3344号服務,通過SpringCloudConfig擷取GitHub的服務位址
discovery:
enabled: true
service-id: microservicecloud-config #config服務端的應用名
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
# 動态重新整理配置 ---需要忽略權限攔截
management:
security:
enabled: false
- 編寫controller,測試動态擷取配置資訊效果
package com.zyc.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
class MessageRestController {
@Value("${testmsg: defaultmsg}")
private String message;
@RequestMapping("/message")
String getMessage() {
return this.message;
}
}
- 啟動類
package com.zyc.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ConfigClient_3355_StartSpringCloudApp
{
public static void main(String[] args)
{
SpringApplication.run(ConfigClient_3355_StartSpringCloudApp.class,args);
}
}
測試
- 通路接口位址http://localhost:8201/message,檢視傳回值
- 修改github上的配置檔案中的值
- 重新整理配置,通過post請求refresh位址
SpringCloud(6)SpringCloud Config 分布式配置中心一 簡介二 服務端demo三 用戶端demo參考 - 再次請求http://localhost:8201/message。會發現傳回值已經變了
bootstrap.yml
applicaiton.yml是使用者級的資源配置項
bootstrap.yml是系統級的,優先級更加高
Spring Cloud會建立一個
Bootstrap Context
,作為Spring應用的
Application Context
的父上下文。初始化的時候,
Bootstrap Context
負責從外部源加載配置屬性并解析配置。這兩個上下文共享一個從外部擷取的
Environment
。
Bootstrap
屬性有高優先級,預設情況下,它們不會被本地配置覆寫。
Bootstrap context
和
Application Context
有着不同的約定,
是以新增了一個
bootstrap.yml
檔案,保證
Bootstrap Context
和
Application Context
配置的分離。
參考
- 尚矽谷 2019最新 spring cloud開發
- github源碼
- https://blog.csdn.net/forezp/article/details/70037513