業餘草 SpringCloud教程 | 第六篇: 分散式配置中心(Spring Cloud Config)(Finchley版本)
在上一篇文章講述zuul的時候,已經提到過,使用配置服務來儲存各個服務的配置檔案。它就是Spring Cloud Config。
一、簡介
在分散式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分散式配置中心元件。在Spring Cloud中,有分散式配置中心元件spring cloud config ,它支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git倉庫中。在spring cloud config 元件中,分兩個角色,一是config server,二是config client。
二、構建Config Server
父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>
<groupId>com.forezp</groupId>
<artifactId>sc-f-chapter6</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>config-server</module>
<module>config-client</module>
</modules>
<name>sc-f-chapter6</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<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>
建立一個spring-boot專案,取名為config-server,其pom.xml如下:
<?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>
<groupId>com.forezp</groupId>
<artifactId>config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>config-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.forezp</groupId>
<artifactId>sc-f-chapter6</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在程式的入口Application類加上@EnableConfigServer註解開啟配置伺服器的功能,程式碼如下:
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
需要在程式的配置檔案application.properties檔案配置以下:
spring.application.name=config-server
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
spring.cloud.config.server.git.searchPaths=respo
spring.cloud.config.label=master
spring.cloud.config.server.git.username=
spring.cloud.config.server.git.password=
- spring.cloud.config.server.git.uri:配置git倉庫地址
- spring.cloud.config.server.git.searchPaths:配置倉庫路徑
- spring.cloud.config.label:配置倉庫的分支
- spring.cloud.config.server.git.username:訪問git倉庫的使用者名稱
- spring.cloud.config.server.git.password:訪問git倉庫的使用者密碼
如果Git倉庫為公開倉庫,可以不填寫使用者名稱和密碼,如果是私有倉庫需要填寫,本例子是公開倉庫,放心使用。
遠端倉庫https://github.com/forezp/SpringcloudConfig/ 中有個檔案config-client-dev.properties檔案中有一個屬性:
foo = foo version 3
啟動程式:訪問http://localhost:8888/foo/dev
{"name":"foo","profiles":["dev"],"label":"master",
"version":"792ffc77c03f4b138d28e89b576900ac5e01a44b","state":null,"propertySources":[]}
證明配置服務中心可以從遠端程式獲取配置資訊。
http請求地址和資原始檔對映如下:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
三、構建一個config client
重新建立一個springboot專案,取名為config-client,其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>
<groupId>com.forezp</groupId>
<artifactId>config-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>config-client</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.forezp</groupId>
<artifactId>sc-f-chapter6</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
其配置檔案bootstrap.properties:
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri= http://localhost:8888/
server.port=8881
- spring.cloud.config.label 指明遠端倉庫的分支
-
spring.cloud.config.profile
- dev開發環境配置檔案
- test測試環境
- pro正式環境
-
spring.cloud.config.uri= http://localhost:8888/ 指明配置服務中心的網址。
程式的入口類,寫一個API介面“/hi”,返回從配置中心讀取的foo變數的值,程式碼如下:
@SpringBootApplication
@RestController
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@Value("${foo}")
String foo;
@RequestMapping(value = "/hi")
public String hi(){
return foo;
}
}
開啟網址訪問:http://localhost:8881/hi,網頁顯示:
foo version 3
這就說明,config-client從config-server獲取了foo的屬性,而config-server是從git倉庫讀取的,如圖:
本文原始碼下載:
https://github.com/forezp/SpringCloudLearning/tree/master/sc-f-chapter6
四、參考資料
http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html
感謝您的關注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群進群密碼:xttblog,想加微信群的朋友,可以微信搜尋:xmtxtt,備註:“xttblog”,新增助理微信拉你進群。備註錯誤不會同意好友申請。再次感謝您的關注!後續有精彩內容會第一時間發給您!原創文章投稿請傳送至532009913@qq.com郵箱。商務合作可新增助理微信進行溝通!
相關文章
- 業餘草 SpringCloud教程 | 第七篇: 高可用的分散式配置中心(Spring Cloud Config)(Finchley版本)SpringGCCloud分散式
- Spring Cloud Config 分散式配置中心【Finchley 版】SpringCloud分散式
- SpringCloud分散式微服務雲架構 第六篇: 分散式配置中心(Spring Cloud Config)SpringGCCloud分散式微服務架構
- 業餘草 SpringCloud教程 | 第八篇: 訊息匯流排(Spring Cloud Bus)(Finchley版本)SpringGCCloud
- 業餘草 SpringCloud教程 | 第九篇: 服務鏈路追蹤(Spring Cloud Sleuth)(Finchley版本)SpringGCCloud
- 跟我學SpringCloud | 第六篇:Spring Cloud Config Github配置中心SpringGCCloudGithub
- 業餘草 SpringCloud教程 | 第四篇:斷路器(Hystrix)(Finchley版本)SpringGCCloud
- 業餘草 SpringCloud教程 | 第十篇: 高可用的服務註冊中心(Finchley版本)SpringGCCloud
- Spring Cloud(八)高可用的分散式配置中心 Spring Cloud ConfigSpringCloud分散式
- Spring Cloud實戰系列(六) - 分散式配置中心Spring Cloud ConfigSpringCloud分散式
- SpringCloud-分散式配置中心(config)SpringGCCloud分散式
- SpringCloud-Config 分散式配置中心SpringGCCloud分散式
- 業餘草 SpringCloud教程 | 第五篇: 路由閘道器(zuul)(Finchley版本)SpringGCCloud路由Zuul
- 業餘草 SpringCloud教程 | 第三篇: 服務消費者(Feign)(Finchley版本)SpringGCCloud
- 非spring boot (即spring) 使用/整合 Spring cloud Config 分散式配置中心Spring BootCloud分散式
- 業餘草 SpringCloud教程 | 第十一篇: 斷路器監控(Hystrix Dashboard)(Finchley版本)SpringGCCloud
- 微服務SpringCloud之Spring Cloud Config配置中心Git微服務SpringGCCloudGit
- springcloud之config配置中心-Finchley.SR2版SpringGCCloud
- 業餘草 SpringCloud教程 | 第二篇: 服務消費者(rest+ribbon)(Finchley版本)SpringGCCloudREST
- 業餘草 SpringCloud教程 | 第十二篇: 斷路器聚合監控(Hystrix Turbine)(Finchley版本)SpringGCCloud
- Spring Cloud Config 配置中心SpringCloud
- Spring Cloud(九)高可用的分散式配置中心 Spring Cloud Config 整合 Eureka 服務SpringCloud分散式
- 業餘草 SpringCloud 教程 | 第一篇: 服務的註冊與發現Eureka(Finchley版本)SpringGCCloud
- Spring Cloud Config 實現配置中心SpringCloud
- SpringCloud Config 配置中心SpringGCCloud
- 基於Spring Cloud搭建分散式配置中心SpringCloud分散式
- 《springcloud 三》分散式配置中心SpringGCCloud分散式
- 分散式配置中心spingcloud-config-server分散式GCCloudServer
- SpringCloud之分散式配置中心(六)SpringGCCloud分散式
- SpringCloud Netflix (六):Config 配置中心SpringGCCloud
- Java B2B2C o2o多使用者商城 springcloud架構 (六)分散式配置中心(Spring Cloud Config)JavaSpringGCCloud架構分散式
- spring cloud分散式微服務:Spring Cloud ConfigSpringCloud分散式微服務
- java B2B2C springmvc mybatis電子商城系統-分散式配置中心(Spring Cloud Config)JavaSpringMVCMyBatis分散式Cloud
- spring cloud微服務分散式雲架構-Spring Cloud Config環境庫SpringCloud微服務分散式架構
- 整合spring cloud雲架構 -高可用的分散式配置中心SpringCloud架構分散式
- SpringCloud分散式微服務雲架構 第八篇: 訊息匯流排(Spring Cloud Bus)(Finchley版本)SpringGCCloud分散式微服務架構
- SpringCloud Alibaba實戰(10:分散式配置中心)SpringGCCloud分散式
- spring cloud微服務分散式雲架構-config配置自動重新整理SpringCloud微服務分散式架構