下午抽空看了下Spring Cloud Config搭建配置中心,過程當中有點坑,不過總算過來了,和你們分享一下。java
瞭解Spring Boot+Spring Cloud的微服務框架的都應該知道,它的出現不是爲了單個的服務,而是爲了更多的服務而產生的,也正是這種需求,在開發中,服務配置的管理尤其重要,畢竟這是能夠不斷累加的,愈來愈多的服務配置須要管理,一着不慎,就可能出現不少錯誤,並且也不方便,這也是咱們所不想看到的。在分佈式系統中,因爲服務數量巨多,爲了方便服務配置文件統一管理,實時更新,因此須要分佈式配置中心組件:Spring Cloud Config。git
Spring Cloud Config組件支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client,下面我來講下配置在遠程Git倉庫的實現。github
開發環境:Windowsweb
開發工具:Eclipse_oxygen(沒必要統一,IDEA更好),Mavenspring
一、構建Config Serverapache
建立Maven項目,名爲EurekaConfigServer,幾個配置文件以下:服務器
pom.xml配置:app
<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>EurekaConfigServer</groupId> <artifactId>EurekaConfigServer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>EurekaConfigServer</name> <description>Demo For EurekaConfigServer</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--config server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!-- spring boot test --> <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>Dalston.SR4</version><!-- 對所依賴jar包進行版本管理的管理器 --> <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>
這裏要注意幾點,否則後面運行會有問題。首先添加必要的依賴項:框架
<!--config server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
而後注意dependencyManagement中version的版本和parent中version版本,若是是其餘的版本,在運行程序時可能會報錯,固然這不是惟一的,就像我以前parent的版本是1.4.7就出錯了,改爲1.5.4就行了,這是在運行http://localhost:8888/config-client/dev時報錯的,錯誤以下:org/springframework/boot/autoconfigure/context/PropertyPlaceholderAutoConfiguration,後來查看了對應的jar包才發現原來的版本里沒有這個類,因此換成有這個類的版本就行了(祝脫坑)。maven
application.properties配置:
spring.application.name=config-server server.port=8888 #eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ #配置git倉庫地址 spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/ #配置倉庫路徑 spring.cloud.config.server.git.searchPaths=respo #配置倉庫的分支 spring.cloud.config.label=master #訪問git倉庫的用戶名(公共倉庫可不填) #spring.cloud.config.server.git.username= #訪問git倉庫的用戶密碼(公共倉庫可不填) #spring.cloud.config.server.git.password=
這裏的公共倉庫裏已新建了一個配置文件:config-client-dev.properties,主要是爲了讀取裏面的屬性。
http請求地址和資源文件映射以下:
Application.java代碼:
@SpringBootApplication @EnableConfigServer //開啓配置服務器功能 public class ConfigServerApplication{ public static void main(String[] args){ SpringApplication.run(ConfigServerApplication.class,args); } }
運行Application,訪問http://localhost:8888/config-client-dev.properties,可獲得以下配置:
democonfigclient.message: hello spring io foo: foo version 2
這是git倉庫中新建的配置文件裏的屬性,固然也能夠這樣訪問http://localhost:8888/config-client/dev,結果以下:
{"name":"config-client","profiles":["dev"],"label":null,"version":"a68876a6211369bae723348d5f8c3defe4a55e04", "state":null,"propertySources":[{"name":"https://github.com/forezp/SpringcloudConfig/respo/config-client-dev.properties", "source":{"democonfigclient.message":"hello spring io","foo":"foo version 2"}}]}
二、構建config client
同理,建立Maven項目,名爲EurekaConfigClient,幾個配置文件以下:
pom.xml配置:
<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>EurekaConfigClient</groupId> <artifactId>EurekaConfigClient</artifactId> <version>0.0.1-SNAPSHOT</version> <name>EurekaConfigClient</name> <description>Demo For EurekaConfigClient</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- spring boot test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR4</version><!-- 對所依賴jar包進行版本管理的管理器 --> <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>
這裏注意一下和config server配置裏的不一樣。
application.properties配置:
spring.application.name=config-client server.port=8889 #配置服務中心網址 spring.cloud.config.uri=http://localhost:8888/ #dev開發環境配置文件,test測試環境,pro正式環境 spring.cloud.config.profile=dev #遠程倉庫的分支 spring.cloud.config.label=master
application.java代碼:
@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; } }
這裏寫一個程序的入口類,API接口「/hi」,返回從配置中心讀取的foo變量的值,運行程序訪問http://localhost:8889/hi,結果以下:
foo version 2
能夠看到,能夠成功讀取了遠程Git倉庫中的配置信息了。