javascript
第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev
一、簡介
在分布式系統中,由于服務數量巨多,為了方便服務配置文件統一管理,實時更新,所以需要分布式配置中心組件。
在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。
在spring cloud config 組件中,分兩個角色,
一是config server,二是config client。
在企業中這2個應用都應該要注冊到Eureka-server上面,這樣可以更好的監控服務的狀態。
二、構建Config Server
第1步:創建父工程(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步: 創建一個spring-boot項目,取名為config-server
- 其pom.xml如下:
第3步:在程序的入口Application類加上@EnableConfigServer注解開啟配置服務器的功能
- 代碼如下:
第4步:需要在程序的配置文件application.properties文件配置以下:
#注冊中心地址 eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/ #服務端口號 server:port: 8888 #應用名稱 #git遠程倉庫的配置信息 地址 賬號 秘鑰 本地保存配置文件的路徑 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倉庫地址
- spring.cloud.config.server.git.searchPaths:配置倉庫路徑
- spring.cloud.config.server.git.username:訪問git倉庫的用戶名
- spring.cloud.config.server.git.password:訪問git倉庫的用戶秘鑰
- spring.cloud.config.server.git.basedir:保存配置文件的本地路徑
如果Git倉庫為公開倉庫,可以不填寫用戶名和密碼,如果是私有倉庫需要填寫,本例子是公開倉庫,放心使用。
第5步:在遠程倉庫創建倉庫和新增配置文件
- 在遠程倉庫創建一個倉庫名稱為config-re
- 在config-rep倉庫中新建一個文件名為config-client-dev.properties
- 文件中的內容屬性如下:
- 遠程倉庫地址:https://github.com/gb-heima/config-rep.git
場景測試1:
操作流程如下:
- 先啟動eureka-server工程,端口號8761
- 再啟動config-server工程,端口號8888
- 啟動程序:訪問http://localhost:8888/config-client-dev.yml
- 測試效果圖1:
- 也可以訪問:http://localhost:8888/gblfy/dev
- 效果圖2:
證明配置服務中心可以從遠程程序獲取配置信息
注:配置好遠程倉庫信息后,可以通過配置中心驗證配置信息是否正確,正確會正常顯示,不正確會有提示,根據提示進行修改即可
http請求地址和資源文件映射如下:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
三、構建一個config client
第1步:重新創建一個springboot項目,取名為config-client,
引入pom依賴如下所示:
在上面依賴基礎上再添加以下3個依賴:
- lombok:省區寫getset
- spring-boot-starter-data-jpa:控制臺輸出sql 操作數據庫
- mysql-connector-java:數據庫依賴及驅動等信息
第2步:添加啟動主類
@SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}第3步:全局配置文件bootstrap.yml
mysql和jpa的配置信息配置到git遠程倉庫中的config-client-dev.yml文件中
config-client-dev.yml文件內容如下所示:
本地bootstrap.yml配置內容如下:
#應用名稱 spring:application:name: config-clientcloud:config:discovery:enabled: true # 服務端應用名稱service-id: CONFIG-SERVERprofile: dev #注冊中心地址 eureka:client:service-url:defaultZone: http://localhost:8761/eureka #服務端口號 server:port: 8881spring.cloud.config.profile
- dev開發環境配置文件
- test測試環境
- pro正式環境
注意,這里配置文件名稱不是application.yml而是替換成bootstrap.yml
理由如下:
1、當全局配置文件為application.yml時,應用啟動就會從配置文件中讀取配置信息,再去將自己的服務注冊到eureka-server上面
2、當全局配置文件為bootstrap.yml時,應用啟動就會先將服務注冊中eureka-server注冊中心,然后通過應用名稱在注冊中心找到配置中心的應用也就是(CONFIG-SERVER)
3、CONFIG-SERVER就會從git遠程倉庫中拉取配置信息
舉個栗子:
在config-client服務中配置了mysq數據庫的配置,而mysql的配置信息放到了遠程的git倉庫中,在本地是沒有的。用application.yml當配置文件時,就是啟動報錯,異常信息時,找不到jdbc的信息。
解決方案:
將application.yml配置文件更名為bootstrap.yml(注文件后綴名.properties也支持)
本地的bootstrap.yml和遠程的bootstrap.yml是通過config-server端,連接git遠程倉庫拉取配置信息,再通過應用名稱,來取配置信息,應用名稱一致,config-server就可以成功拉取配置信息,config-client在從config-server服務中拉取配置信息。
架構如圖所示:
第4步:寫一個與bootstrap.yml配置文件中信息對應的配置類GirlConfig(用戶去配置文件中的信息)
@Data @Component @ConfigurationProperties(prefix = "girl") public class GirlConfig {private String name;private Integer age; }第5步:程序的入口類GirlController,寫一個API接口“/girl//info”,返回從配置中心讀取的girl對象變量的值
代碼如下:
這就說明,config-client從config-server獲取了girl對象的屬性,而config-server是從git遠程倉庫再區配應用名稱讀取的
本文源碼下載:
dev分支(最新企業實戰版本):
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
總結
以上是生活随笔為你收集整理的第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Guns 添加功能实现_入门试炼05
- 下一篇: 使用thymeleaf的时候报元素类型“