javascript
第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev
一、簡(jiǎn)介
在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多,為了方便服務(wù)配置文件統(tǒng)一管理,實(shí)時(shí)更新,所以需要分布式配置中心組件。
在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在遠(yuǎn)程Git倉(cāng)庫(kù)中。
在spring cloud config 組件中,分兩個(gè)角色,
一是config server,二是config client。
在企業(yè)中這2個(gè)應(yīng)用都應(yīng)該要注冊(cè)到Eureka-server上面,這樣可以更好的監(jiān)控服務(wù)的狀態(tài)。
二、構(gòu)建Config Server
第1步:創(chuàng)建父工程(maven),父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"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/></parent><modules><module>config-server</module><module>eureka-server</module><module>config-client</module></modules><groupId>com.gblfy</groupId><artifactId>sc-f-chapter6</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>sc-f-chapter6</name><description>Demo project for Spring Boot</description><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>Finchley.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>第2步: 創(chuàng)建一個(gè)spring-boot項(xiàng)目,取名為config-server
- 其pom.xml如下:
第3步:在程序的入口Application類加上@EnableConfigServer注解開啟配置服務(wù)器的功能
- 代碼如下:
第4步:需要在程序的配置文件application.properties文件配置以下:
#注冊(cè)中心地址 eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/ #服務(wù)端口號(hào) server:port: 8888 #應(yīng)用名稱 #git遠(yuǎn)程倉(cāng)庫(kù)的配置信息 地址 賬號(hào) 秘鑰 本地保存配置文件的路徑 spring:application:name: config-servercloud:config:server:git:uri: git@github.com:gb-heima/config-rep.gitusername:password:basedir: /Users/Administrator.PC-20180929LWLP/Desktop/springcloud-practical-column/sc-f-chapter6/config/basedir- spring.cloud.config.server.git.uri:配置git倉(cāng)庫(kù)地址
- spring.cloud.config.server.git.searchPaths:配置倉(cāng)庫(kù)路徑
- spring.cloud.config.server.git.username:訪問(wèn)git倉(cāng)庫(kù)的用戶名
- spring.cloud.config.server.git.password:訪問(wèn)git倉(cāng)庫(kù)的用戶秘鑰
- spring.cloud.config.server.git.basedir:保存配置文件的本地路徑
如果Git倉(cāng)庫(kù)為公開倉(cāng)庫(kù),可以不填寫用戶名和密碼,如果是私有倉(cāng)庫(kù)需要填寫,本例子是公開倉(cāng)庫(kù),放心使用。
第5步:在遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建倉(cāng)庫(kù)和新增配置文件
- 在遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建一個(gè)倉(cāng)庫(kù)名稱為config-re
- 在config-rep倉(cāng)庫(kù)中新建一個(gè)文件名為config-client-dev.properties
- 文件中的內(nèi)容屬性如下:
- 遠(yuǎn)程倉(cāng)庫(kù)地址:https://github.com/gb-heima/config-rep.git
場(chǎng)景測(cè)試1:
操作流程如下:
- 先啟動(dòng)eureka-server工程,端口號(hào)8761
- 再啟動(dòng)config-server工程,端口號(hào)8888
- 啟動(dòng)程序:訪問(wèn)http://localhost:8888/config-client-dev.yml
- 測(cè)試效果圖1:
- 也可以訪問(wèn):http://localhost:8888/gblfy/dev
- 效果圖2:
證明配置服務(wù)中心可以從遠(yuǎn)程程序獲取配置信息
注:配置好遠(yuǎn)程倉(cāng)庫(kù)信息后,可以通過(guò)配置中心驗(yàn)證配置信息是否正確,正確會(huì)正常顯示,不正確會(huì)有提示,根據(jù)提示進(jìn)行修改即可
http請(qǐng)求地址和資源文件映射如下:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
三、構(gòu)建一個(gè)config client
第1步:重新創(chuàng)建一個(gè)springboot項(xiàng)目,取名為config-client,
引入pom依賴如下所示:
在上面依賴基礎(chǔ)上再添加以下3個(gè)依賴:
- lombok:省區(qū)寫getset
- spring-boot-starter-data-jpa:控制臺(tái)輸出sql 操作數(shù)據(jù)庫(kù)
- mysql-connector-java:數(shù)據(jù)庫(kù)依賴及驅(qū)動(dòng)等信息
第2步:添加啟動(dòng)主類
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}第3步:全局配置文件bootstrap.yml
mysql和jpa的配置信息配置到git遠(yuǎn)程倉(cāng)庫(kù)中的config-client-dev.yml文件中
config-client-dev.yml文件內(nèi)容如下所示:
本地bootstrap.yml配置內(nèi)容如下:
#應(yīng)用名稱 spring:application:name: config-clientcloud:config:discovery:enabled: true # 服務(wù)端應(yīng)用名稱service-id: CONFIG-SERVERprofile: dev #注冊(cè)中心地址 eureka:client:service-url:defaultZone: http://localhost:8761/eureka #服務(wù)端口號(hào) server:port: 8881spring.cloud.config.profile
- dev開發(fā)環(huán)境配置文件
- test測(cè)試環(huán)境
- pro正式環(huán)境
注意,這里配置文件名稱不是application.yml而是替換成bootstrap.yml
理由如下:
1、當(dāng)全局配置文件為application.yml時(shí),應(yīng)用啟動(dòng)就會(huì)從配置文件中讀取配置信息,再去將自己的服務(wù)注冊(cè)到eureka-server上面
2、當(dāng)全局配置文件為bootstrap.yml時(shí),應(yīng)用啟動(dòng)就會(huì)先將服務(wù)注冊(cè)中eureka-server注冊(cè)中心,然后通過(guò)應(yīng)用名稱在注冊(cè)中心找到配置中心的應(yīng)用也就是(CONFIG-SERVER)
3、CONFIG-SERVER就會(huì)從git遠(yuǎn)程倉(cāng)庫(kù)中拉取配置信息
舉個(gè)栗子:
在config-client服務(wù)中配置了mysq數(shù)據(jù)庫(kù)的配置,而mysql的配置信息放到了遠(yuǎn)程的git倉(cāng)庫(kù)中,在本地是沒有的。用application.yml當(dāng)配置文件時(shí),就是啟動(dòng)報(bào)錯(cuò),異常信息時(shí),找不到j(luò)dbc的信息。
解決方案:
將application.yml配置文件更名為bootstrap.yml(注文件后綴名.properties也支持)
本地的bootstrap.yml和遠(yuǎn)程的bootstrap.yml是通過(guò)config-server端,連接git遠(yuǎn)程倉(cāng)庫(kù)拉取配置信息,再通過(guò)應(yīng)用名稱,來(lái)取配置信息,應(yīng)用名稱一致,config-server就可以成功拉取配置信息,config-client在從config-server服務(wù)中拉取配置信息。
架構(gòu)如圖所示:
第4步:寫一個(gè)與bootstrap.yml配置文件中信息對(duì)應(yīng)的配置類GirlConfig(用戶去配置文件中的信息)
@Data @Component @ConfigurationProperties(prefix = "girl") public class GirlConfig {private String name;private Integer age; }第5步:程序的入口類GirlController,寫一個(gè)API接口“/girl//info”,返回從配置中心讀取的girl對(duì)象變量的值
代碼如下:
這就說(shuō)明,config-client從config-server獲取了girl對(duì)象的屬性,而config-server是從git遠(yuǎn)程倉(cāng)庫(kù)再區(qū)配應(yīng)用名稱讀取的
本文源碼下載:
dev分支(最新企業(yè)實(shí)戰(zhàn)版本):
https://github.com/gb-heima/springcloud-practical-column/tree/dev/sc-f-chapter6
master分支(入門版本):
https://github.com/gb-heima/springcloud-practical-column/tree/master/sc-f-chapter6
總結(jié)
以上是生活随笔為你收集整理的第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Guns 添加功能实现_入门试炼05
- 下一篇: gradle idea java ssm