Spring Cloud Config分佈式配置

    下午抽空看了下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}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

    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倉庫中的配置信息了。

相關文章
相關標籤/搜索