相對路徑和絕對路徑的區別
Spring Cloud Config 中文文件 參考手冊 中文版
Config簡介
微服務意味著要將單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,因此係統中會出現大量的服務,由於每個服務都需要必要的配置資訊才能執行,所以一套集中式的,動態的配置管理設施是必不可少的。spring cloud提供了configServer來解決這個問題,我們每一個微服務自己帶著一個application.yml,那上百個的配置檔案修改起來,令人頭疼!
spring cloud config 為微服務架構中的微服務提供集中化的外部支援,配置伺服器為各個不同微服務應用的所有環節提供了一個中心化的外部配置
spring cloud config 分為服務端和客戶端兩部分
服務端也稱為 分散式配置中心,它是一個獨立的微服務應用,用來連線配置伺服器併為客戶端提供獲取配置資訊,加密,解密資訊等訪問介面。
客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啟動的時候從配置中心獲取和載入配置資訊。配置伺服器預設採用git來儲存配置資訊,這樣就有助於對環境配置進行版本管理。並且可用通過git客戶端工具來方便的管理和訪問配置內容。
spring cloud config 分散式配置中心能幹嘛?
- 集中式管理配置檔案
- 不同環境,不同配置,動態化的配置更新,分環境部署,比如 /dev /test /prod /beta /release
- 執行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置檔案,服務會向配置中心統一拉取配置自己的資訊
- 當配置發生變動時,服務不需要重啟,即可感知到配置的變化,並應用新的配置
- 將配置資訊以REST介面的形式暴露
spring cloud config 分散式配置中心與Gitee(GitHub)整合
由於spring cloud config 預設使用git來儲存配置檔案 (也有其他方式,比如自持SVN 和本地檔案),但是最推薦的還是git ,而且使用的是 http / https 訪問的形式。
所以首先,我們需要先上gitee上進行配置,新建一個倉庫
gitee地址:https://gitee.com/
這裡如果使用SSH的話後面操作需要配置金鑰,HTTPS則可以不需要
然後在電腦上新建一個檔案來儲存我們的gitee倉庫
右鍵選擇Git Bash Here
配置名稱和email
git clone + 剛才複製下來的地址(HTTPS)即可將倉庫拉取下來
輸入gitee的使用者密碼即可
此時就將我們的gitee的倉庫就拉取下來了
上傳檔案至gitee
建立一個application.yml檔案
檔案內容
spring: profiles: active: test --- spring: profiles: dev application: name: spring-config-dev --- spring: profiles: test application: name: spring-config-test
將該檔案push到我們gitee上
其實用Idea連線gitee可以更方便的實現這些操作,可以自己上網百度一下如何操作
構建SpringCloud config服務端
新建springcloud-config-3344模組
Maven依賴
<!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
application.yml
server: port: 3344 spring: application: name: springcloud-config-server #連線遠端git倉庫 cloud: config: server: git: uri: https://gitee.com/chenjz1/springcloud-config.git #該地址就是gitee上HTTPS所複製的地址 #倉庫如果是私有屬性則需要設定賬戶/密碼 # username: # password:
啟動類
@SpringBootApplication @EnableConfigServer public class SpringcloudConfig3344Application { public static void main(String[] args) { SpringApplication.run(SpringcloudConfig3344Application.class, args); } }
啟動服務後即可通過下列方式來訪問到我們gitee倉庫上的配置檔案內容
此時我們可以在建立一個檔案上傳至gitee上給我們的config客戶端使用
檔案內容
spring: profiles: active: dev --- server: port: 8201 spring: profiles: dev application: name: springcloud-provider-user #Eureka的配置 eureka: client: service-url: defaultZone: http://Eureka-Server1:7001/eureka/,http://Eureka-Server2:7002/eureka/ #Eureka叢集只需要用逗號分隔即可 --- server: port: 8202 spring: profiles: test application: name: springcloud-provider-user #Eureka的配置 eureka: client: service-url: defaultZone: http://Eureka-Server1:7001/eureka/,http://Eureka-Server2:7002/eureka/ #Eureka叢集只需要用逗號分隔即可
上傳至gitee
上傳了新檔案的話,最好先使用config服務端測試下是否能夠成功訪問,因為我們config客戶端是通過服務端來獲取檔案內容的,在文章最頂部的簡介中也說明到了
構建SpringCloud config客戶端
新建springcloud-config-client-3355模組
Maven依賴
<!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!--Web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
bootstrap.yml
#系統級別的設定 spring: cloud: config: name: config-client #需要從git上讀取的資源名稱 profile: dev label: master #分支 uri: http://localhost:3344 #config服務端地址
application.yml
#使用者級別的設定 spring: application: name: springcloud-config-client-3355
ConfigClientController
新建一個controller來嘗試遠端獲取到我們的配置檔案內容
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ConfigClientController { @Value("${spring.application.name}") private String applicationName; @Value("${eureka.client.service-url.defaultZone}") private String eurekaServer; @Value("${server.port}") private String port; @RequestMapping("/config") public String getConfig(){ return applicationName + " " + eurekaServer + " " + port; } }
啟動類
@SpringBootApplication public class SpringcloudConfigClient3355Application { public static void main(String[] args) { SpringApplication.run(SpringcloudConfigClient3355Application.class, args); } }
啟動後訪問以下地址,可以看到,埠是我們遠端配置的埠,並且可以獲取到我們遠端的配置檔案資訊
其實我們的其他配置檔案都可以參照config服務端進行配置,將配置檔案全部統一放置gitee上進行管理