1.1 配置中心Config
1.1.1 為什么需要使用配置中心來統一管理配置呢?
通常在一個分布式環境中,同類型的、不同類型的服務有幾個,幾十個服務實例。如果出現數據源、接口等變更時,程序員通過手工修改配置就可以了。但對於分布式環境中多達上千、上萬的服務實例來說,單單修改配置這項目工作就會耗費程序員很多時間和精力。所以為了更好的解決分布式環境下多台服務實例的配置統一管理問題,引入了統一配置管理的方式來解決這類難題。
1.1.2 介紹
開發分布式系統如果還是各個服務配置文件單獨配置肯定是不行的,springcloud使用的解決方案是搭建配置中心將並指定一個配置文件路徑如git項目對配置文件進行統一管理。
在Spring Cloud中,提供了分布式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在實現cloud config中,主要有兩個角色:作為配置中心連接配置路徑的 config server,連接配置中心讀取配置的config client。
1.2 配置中心服務端
1.2.1 創建Spring Starter Project工程
復制eureka-server工程並修改pom文件或者新建子模塊




1.2.2 pom.xml
1.2.3 application.properties
spring.application.name=config-server
server.port=8097
eureka.client.serviceUrl.defaultZone=http://localhost:6001/eureka
# 配置git倉庫地址
spring.cloud.config.server.git.uri=https://github.com/nutony/myspringcloudconfig
# 配置倉庫的分支
spring.cloud.config.label=master
# 訪問git倉庫的用戶名
spring.cloud.config.server.git.username=wood
# 訪問git倉庫的用戶密碼 如果Git倉庫為公開倉庫,可以不填寫用戶名和密碼,如果是私有倉庫需要填寫
spring.cloud.config.server.git.password=wood123
# 打印日志(開發模式)
logging.level.root=DEBUG
1.2.4 拓展:從git上獲取資源的格式
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
l application: 表示應用名稱,在client中通過spring.config.name配置
l profile: 表示獲取指定環境下配置,例如開發環境、測試環境、生產環境 默認值default,實際開發中可以是 dev、test、demo、production等
l label: git標簽,默認值master
訪問鏈接:
http://localhost:8097/jtver/dev
http://localhost:8097/foo/default
http://localhost:8097/foo/development
1.2.5 Git上傳屬性文件
創建倉庫myspringcloudconfig,上傳屬性文件config-client-dev.properties編寫內容為:jtver=jt version 4.1。
1.2.6 ConfigServerApplication
@EnableConfigServer
1.2.7 測試
http://localhost:8097/config-client/dev
1.3 配置中心客戶端
1.3.1 創建Maven工程
1.3.2 pom.xml
注意:必須加spring-boot-starter-actuator依賴,否則post請求是報404錯誤。
1.3.3 拓展:bootstrap和application加載順序
Spring Boot有兩種類型的配置文件,application和bootstrap文件。Spring Boot會自動加載classpath目前下的這兩個文件,文件格式為properties或者yml格式。
*.properties格式 key=value的形式
*.yml格式 key: value的形式,支持樹形或者鏈式結構
l *.yml加載的屬性是有順序的
l application配置文件是應用級別的,是當前應用的配置文件。
l bootstrap配置文件是系統級別的,用來加載外部配置,如配置中心的配置信息,也可以用來定義系統不會變化的屬性。
l bootstatp文件的加載先於application文件。
1.3.4 bootstrap.properties
注意:說明:此處不能用application.properties,因為代碼中使用@Value注解,必須在應用程序執行之前初始化。
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
1.3.5 HelloController
@Value("${jtver}")
String jtver;
1.4 動態刷新配置
1.4.1 解決方案
在Controller類上增加@RefreshScope注解,在bootstrap.properties文件中配置management.security.enabled=false,提交post刷新請求,http://localhost:8098/refresh 就會更新屬性值(底層實現要求必須是post請求)。
1.4.3 bootstrap.properties
注意:說明:此處不能用application.properties,因為代碼中使用@Value注解,必須在應用程序執行之前初始化。
spring.application.name=config-client
server.port=8098
eureka.client.serviceUrl.defaultZone=http://localhost:6001/eureka
spring.cloud.config.label=master
spring.cloud.config.profile=dev
#配置中心服務端地址
spring.cloud.config.uri= http://localhost:8097/
#要刷新配置信息必須停掉安全訪問,並且controller上增加@RefreshScope注解
management.security.enabled=false
