springCloud学习1(集中式配置管理)
springcloud 總集:www.tapme.top/blog/detail…
一、前言
??在開發普通的 web 應用中,我們通常是將配置項寫在單獨的配置文件中,比如application.yml,application.properties,但是在微服務架構中,可能會出現數百個微服務,如果每個微服務將配置文件寫在自身的配置文件中,會導致配置文件的管理非常復雜。因此集中式的配置管理是非常有必要的,每個服務啟動時從集中式的存儲庫中讀取需要的配置信息。其模型如下:
簡單來說就是如下幾點:
??由于本系列為 spring cloud,所以使用Spring Cloud Config來構建配置管理,當然還有很多其他優秀的解決方案(Etcd,Eureka,Consul...)。
二、構建配置服務
??spring cloud 是建立在 spring boot 的基礎上的,因此需要有 spring boot 的構建基礎。
1、pom 編寫
??pom 主要依賴如下(篇幅原因列出主要內容,完整代碼請到 github 上查看),spring boot 版本和 spring cloud 版本如下,之后不在贅述:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.4.RELEASE</version> </parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies> </dependencyManagement><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Camden.SR5</spring-cloud.version> </properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies> 復制代碼2、注解引導類
??只需在 spring boot 啟動類上加入一個@EnableConfigServer注解即可。
3、配置服務配置編寫(使用文件存儲)
??這里是給配置服務使用的配置文件,用于聲明端口,存儲庫類別等信息,并不是給其他微服務使用的配置。配置如下(使用文件存儲配置信息):
server: port: 8888 spring: profiles:# 使用文件系統來存儲配置信息,需要設置為native active: native cloud: config: server: native:# 使用文件來存放配置文件,為每個應用程序提供用逗號分隔的文件夾列表 searchLocations: file:///D:/configFolder/licensingservice 復制代碼4、創建供應用程序使用的配置文件
??通過上面的searchLocations可知目前有一個名為 licensingservice 的應用程序,在對應目錄下創建如下三個配置文件:
- licensingservice.yml
- licensingservice-dev.yml
- licensingservice-prod.yml
配置文件命名約定為:應用程序名稱-環境名稱.yml。現在啟動應用便能通過 http 請求來獲取配置了。
??請求localhost:8888/licensingservice/default,返回結果如下:
{"name": "licensingservice","profiles": ["default"],"label": null,"version": null,"state": null,"propertySources": [{"name": "file:///D:/configFolder/licensingservice/licensingservice.yml","source": {"server.port": 10001,"spring.application.name": "licensingservice"}}] } 復制代碼??請求localhost:8888/licensingservice/dev,返回結果如下:
{"name": "licensingservice","profiles": ["dev"],"label": null,"version": null,"state": null,"propertySources": [{"name": "file:///D:/configFolder/licensingservice/licensingservice-dev.yml","source": {"server.port": 10011}},{"name": "file:///D:/configFolder/licensingservice/licensingservice.yml","source": {"server.port": 10001,"spring.application.name": "licensingservice"}}] } 復制代碼二、和 spring boot 客戶端集成
??上面寫了如何使用 spring cloud config 構建配置服務,這一節來構建 licensingserivce 服務,使用上面的配置服務來獲取配置文件。
1、創建 springboot 工程
??創建 springboot 項目 licensingservice,主要依賴如下:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId> </dependency> 復制代碼2、編寫配置文件
??共兩個配置文件,application.yml,bootstrap.yml
-
application.yml
本配置文件用于存放留在本地配置信息,如果存在同名配置,本地的會被覆蓋,不會生效
server: port: 10099 復制代碼 -
bootstrap.yml
給 spring cloud config client 讀取的配置文件,根據該配置向配置中心請求
spring: application:#指定名稱,以便spring cloud config客戶端知道查找哪個配置 name: licensingservice profiles:#指定環境(default,dev,prod) active: dev cloud: config:#指定config server地址 uri: http://localhost:8888 復制代碼PS:如果想要覆蓋 bootstrap.yml 的配置可在啟動命令加上-d 參數,如:
java -Dsptring.cloud.config.uri=.... -Dspring.profiles.active=prod xxxxx.jar
3、啟動
??啟動 licensingservice 可以發現啟動端口為 10011,說明遠程讀取配置生效了。
三、使用 git 作為配置服務的數據源
1、創建源配置文件
??在 github 某個倉庫下創建配置文件,比如在github.com/FleyX/demo-…倉庫下的springcloud/config目錄下創建 licengingservice 服務的配置文件。
2、修改 config server 配置文件
??修改 confsvr 中的 application.yml
server: port: 8888 spring: profiles:# 使用文件系統來存儲配置信息,需要設置為native,git設置為git active: git application: name: test cloud: config: server: native:# 使用文件來存放配置文件,為每個應用程序提供用逗號分隔的文件夾列表 searchLocations: file:///D:/configFolder/licensingservice git: uri: https://github.com/FleyX/demo-project# 查找配置文件路徑(,分隔) search-paths: springcloud/config/licensingservice#如果為公開倉庫,用戶名密碼可不填寫 username: password:#配置git倉庫的分支 label: master 復制代碼3、啟動
??重新啟動,即可發現配置成功生效。
四、配置刷新
??使用 spring cloud 配置服務器時,有一個問題是如何在屬性變化時動態刷新應用程序。spring cloud 配置服務始終提供最新版本的屬性,對低層存儲庫屬性的更改將會是最新的。但是 config client 并不會知道配置的變更,因此不會自動刷新屬性。
??Spring Boot Actuator 提供了一個@RefreshScope屬性來重新讀取應用程序配置信息,開發人員可通過/refresh進行刷新。該注釋需要注釋在啟動入口類上。注意:只會加載自定義 Spring 屬性,例如數據庫,端口等配置不會重新加載。
總結
??本篇只是用到了 spring-cloud-config 這個來進行配置集中管理,并沒有涉及到微服務,在下一篇將開始微服務的學習。 ??本篇兩個項目代碼存放于:點擊跳轉
總結
以上是生活随笔為你收集整理的springCloud学习1(集中式配置管理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么有的网址开头是https,有的却是
- 下一篇: 红米k50稳了,关键参数曝光:与小米12