SpringCloud(八)Spring Cloud Config(2)——配置详解

上一篇文章中我们实现了一个简单的sring Cloud Config配置中心的简单demo。接下来我们学习下一些在实际场景中可能遇到的一些的复杂情况下的应对方法。我们如何配置Spring Cloud Config Server的git配置信息让其从远程git仓库拉取配置信息更灵活;为了安全,如何为配置属性进行加密;如何配置安全认证,如何让配置的属性刷新呢?我们带着这一系列问题往下看。

下面实例代码托管地址:https://github.com/cddofficial/SpringCloudRepo

目录

1. git仓库配置详解

1.1 复制得到microservice-config-server-git项目

1.2 基础配置

1.2.1 修改application.yml配置文件

1.2.2 测试

1.3 通配符

1.3.2 修改application.yml文件

1.3.3 测试

1.4 模式匹配

1.4.1 准备git仓库

1.4.2 修改application.yml文件

1.4.3 测试

1.5 指定目录

1.5.1 准备git仓库

1.5.2 修改application.yml文件

1.5.2 测试

1.6 账号密码

2.配置属性加密

2.1 对称加密

2.1.1 项目准备

2.1.2 配置JCE

2.1.3 应用实战

2.2 非对称加密

2.2.1 生成加密文件

2.2.2 项目准备

2.2.3 测试

3. 配置属性刷新

3.1 手动刷新

3.1.1 复制得到microservice-config-client-refresh

3.1.2 修改pom文件

3.1.3 修改bootstrap.yml配置文件

3.1.4 修改ConfigClientController类

3.1.4 测试

3.2 自动刷新

3.2.1 下载安装rabbitMQ

3.2.2全部刷新之手动刷新——测试rabbitMQ

3.2.2全部刷新之自动刷新


1. git仓库配置详解

前面我们已经搭建好了一个简单的Spring Cloud Config,包含一个Spring Cloud Config Server(即,microservice-config-server项目),一个Spring Cloud Config Client(即,microservice-config-client项目)。在microservice-config-server项目中配置的git仓库是定死的,一点都不灵活。

今天我们来看下,如何在Spring Cloud Config Server中配置git仓库信息,使得从远程git仓库拉取配置信息时更灵活,能满足更多Spring Cloud Config Client的配置要求。

1.1 复制得到microservice-config-server-git项目

复制microservice-config-server项目重命名为microservice-config-server-git项目(至于如何复制这里不再赘述,请看eureka——实战中的 “2.4.1 创建可乐微服务” 的 “复制得到eureka-client-coke),导入到IDE工具后,项目结构截图如下:

1.2 基础配置

1.2.1 修改application.yml配置文件

直接在applicatin.yml文件中配置远程git仓库路径就行了。上篇文章中的实例已经展示了。application.yml文件内容如下图:

前提是存在上面那个远程git仓库cloud-config-git-repo,如下图:

1.2.2 测试

启动microservice-config-server-git完成后, 浏览器访问:http://localhost:7070/master/foobar-dev.yml,拉取到的配置信息如下:

1.3 通配符

1.3.1 准备git仓库

先在github中新建两个仓库simple和special,两个仓库中分别有两个配置文件都是application.yml。其中:

       simple仓库中的applicaion.yml内容为  profile: simple

       special仓库中的applicaion.yml内容为  profile: special

我的github中之前已经创建过这两个仓库了(如果你自己的没有一定要先创建这两个git仓库),部分截图下图:

1.3.2 修改application.yml文件

配置git仓库路径时,仓库名称用“{application}”来代替,匹配远程git仓库名称。截图如下:

1.3.3 测试

重启microservice-config-server-git项目,启动成功后。

浏览器访问:http://localhost:7070/master/simple-xxx.yml,访问路径中的“xxx"可以换成其他字符串,结果截图如下:

浏览器访问:http://localhost:7070/master/special-xxx.properties,访问路径中的后缀“.properties"和”.yml“可以相互替换,结果截图如下:

1.4 模式匹配

1.4.1 准备git仓库

在special仓库里面添加special-dev.yml和special-test.yml文件,内容分别为:

         special-dev.yml文件内容为:profile: special-dev

         special-test.yml文件内容为:profile: special-test

1.4.2 修改application.yml文件

官网参考地址:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_git_backend

修改项目中application.yom文件,修改后内容如下:

1.4.3 测试

重启microservice-config-server-git项目,启动成功后。

1. 浏览器访问:http://localhost:7070/master/special-test.yml,访问路径中的"special-test.yml"正好和模式匹配”special*/test*"匹配上,就会从sepcial仓库拉取配置信息,结果截图如下:

2. 浏览器访问:http://localhost:7070/master/simple-test.yml,访问路径中的"simple-test.yml"和special仓库统模式匹配没有匹配的,就继续往上找,正好和simple仓库匹配上了,结果截图如下:

3. 浏览器访问:http://localhost:7070/master/xxx-test.yml,访问路径中的"xxx-test.yml"和special仓库模式匹配没有匹配的,就继续往上找,和simple仓库也没有匹配上,再继续往上就去找公用仓库cloud-config-git-repo拉取配置信息了,结果截图如下:

4 加上cloneOnStart属性配置,截图如下:

1.5 指定目录

1.5.1 准备git仓库

在cloud-config-git-repo仓库中新建foo和bar两个文件夹,

foo文件夹中有foo-dev.yml文件,文件内容是: profile: foo-dev

bar文件夹中有bar-dev.yml文件,文件内容是: profile: bar-dev

添加好之后,如下图:

1.5.2 修改application.yml文件

application.yml文件修改后,内容截图如下:

1.5.2 测试

重新启动项目microservice-config-server-git,启动成功后。

在浏览器中输入:http://localhost:7070/master/foo-dev.yml,响应页面如下:

在浏览器中输入:http://localhost:7070/master/bar-dev.yml,响应页面如下:

1.6 账号密码

当我们存放配置信息的git仓库是私有的时候,就要配置用户名和密码了,截图如下:

2.配置属性加密

2.1 对称加密

2.1.1 项目准备

1. 复制得到microservice-config-server-encrypt项目

复制microservice-config-server项目重命名为microservice-config-server-encrypt(至于如何复制这里不再赘述,请看eureka——实战中的 “2.4.1 创建可乐微服务” 的 “复制得到eureka-client-coke),导入到IDE工具中,项目结构截图如下:

2. 添加bootstrap.yml文件

在springboot1.0.*版本中,在applicaion.yml配置文件中设置加密密钥是没问题的,可是在springboot2.0.*版本中必须要在bootstrap.yml文件中进行配置,这里也是个坑,大家注意。

先把原来application.yml文件中的所有配置全部删光。

在静态资源文件夹resources下新建一个bootstrap.yml配置文件。

在bootstrap.yml配置文件中配置加密的key,截图如下:

整个bootstrap.yml文件内容如下:

server:
  port: 7070
  
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/cddofficial/cloud-config-git-repo


encrypt:
  key: cdd  #加密密钥

3 启动该项目。

2.1.2 配置JCE

这里要用到JCE(Java Cryptography Extension),默认的jdk里面加解密是128位,在用256时就会报错,所以要配置两个jar包。

看你的jdk是那个版本了,我用的是1.8.*,所以下载的是最后一个。

1.下载下来后是:jce_policy-8.zip,然后解压到一个文件夹中,如下图:

2.进入到解压后的文件夹UnlimitedJCEPolicyJDK8中,复制local_policy.jar,US_export_policy.jar这两个压缩包,如下图:

3.用这两个压缩包替换本地按装的\jdk\jre\lib\security里面同名的压缩包,如下图:

注意:当你安装jdk时,如果把jdk和jre分开安装了,注意你的项目中用的是jdk还是jre,我这里用的是jdk,所有替换jdk里面的jre里面的包;如果你的项目中配置的jre里面的东西,那么你就要替换jre里面的包。

4 测试

这里要到curl工具,下载地址:https://curl.haxx.se/windows/

下载,解压后,进入到bin目录,从这里进入dos窗口,对“cloud-config"进行加密,输入命令:

curl -X POST http://localhost:7070/encrypt -d cloud-config

截图如下:

5 加解密示例

在上节中我们对“cloud-config"进行加密,后得到字符串:

b9114406385712decf7764f0262efdd4a7caaf6d79574e21be24653665c64473

我们用curl工具发请求再对它进行解密,看看能不能得到我们的原文“cloud-config”,如下图:

到这里说明我们的项目和JCE配置都准备成功了。

2.1.3 应用实战

参考官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_encryption_and_decryption_2

1 git仓库准备

给远程cloud-config-git-repo仓库添加两个文件foobar-test.properties和foobar-production.yml,两个文件内容分别为:

foobar-test.properties内容如下:

foobar-production.yml内容如下:

注意:在yml文件中值有单引号,在properties文件中没有单引号

全部提交推送到远程git仓库。

2.Spring Cloud Config Server应用

重新启动microservice-config-server-encrypt项目,启动成功后,在浏览器中输入:

http://localhost:7070/master/foobar-test.properties,可以看到已经解密了,profile的属性值是明文cloud-config,如下图:

浏览器再输入:http://localhost:7070/master/foobar-production.properties 同样也是解密后的cloud-config

到这里说明我们Spring Cloud Config Server端的加解密已经处理好了。

3 Spring Cloud Config Client应用

现在我们再用spring cloud config client来测试下,在microservice-config-client项目中,修改bootstrap.yml文件,修改后内容如下图:

整个boostarp.yml文件内容如下:

server:
  port: 7071
  
spring:
  application:
    name: foobar  #与远程配置文件名称有关,可与下面的profile值,拼成foobar-dev 
  cloud:
    config:
      uri: http://localhost:7070
      profile: test    #只改了这里
      label: master #当config server的后端存储是git时,默认是master

启动microservice-config-client项目,启动成功后,浏览器访问:http://localhost:7071/profile,可以看到获取到了解密后属性值

cloud-config,如下图:

这就是简单的Spring Cloud Config Client端的应用。测试成功后把microservice-config-client项目还原。

2.2 非对称加密

2.2.1 生成加密文件

官方文档地址:

https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/springcloud.html#_creating_a_key_store_for_testing

部分文档截图如下:

随意从一个文件夹进入dos窗口,我这里从C:\project_springCloud进入,执行下面命令:

keytool -genkeypair -alias cddkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass helloWorld -keystore server.jks -storepass zhangwuji

执行完成之后,会在C:\project_springCloud文件夹里生成一个server.jks文件,这就是我们的加密文件。如下图:

查看上面命令各参数的含义,可以输入 keytool -help ,如下图:

2.2.2 项目准备

1 复制得到项目

复制microservice-config-server-encrypt项目重命名为microservice-config-server-encrypt-rsa(至于如何复制这里不再赘述,请看eureka——实战中的 “2.4.1 创建可乐微服务” 的 “复制得到eureka-client-coke),导入到IDE工具中,项目结构截图如下:

2 给项目放加密文件

把上面2.2.1步骤生成的加密文件server.jks复制一份粘贴到静态资源文件夹resoures下,截图如下:

3 修改配置文件bootstrap.yml

在配置文件中增加配置加密文件信息,截图如下:

整个bootstrap.yml文件内容如下:

server:
  port: 7070
  
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/cddofficial/cloud-config-git-repo

#加密文件信息
encrypt:
  key-store:
    location: classpath:/server.jks
    password: zhangwuji
    alias: cddkey
    secret: helloWorld

4 验证

现在我们来验证下配置的是否可用,启动项目,启动成功后,在dos窗口输入:

curl -X POST http://localhost:7070/encrypt -d cdd

会返回通过加密文件server.jks对cdd加密的后字符串,如下图:

到这里说明我们的非对称加密实现了。接下来我们实际去应用下。

我们把上面的加密后得到的密文复制出来,下面要用。在dos窗口对cdd通过加密文件加密后得到的密文如下:

AQBaaMYFruv5e1Gc1sFW1grUGIWTntTawNvJkSLrgpz31hmBJHVf9/eqPpHP9lVMSMLSOkb/68xZ+jqbWyK1Vg3aFgeqKILblfptJaFx+5p2e3LL+BRhQhlcas6zAAdEok4KOTA7xEr6J2Pe4kOhezLQZceIPRy30k+qA0j4E31fpt/OMQ4XESNv5uM+W/iYrETd9joE94od9bt4R5gRkCQnQQQUZM58Q6ctvHIZGazOzgKgmYgtBHuHiIvt+sNijzPsxcdQf4Ey2xk03vyMAYMc1y4T3yGH43GG7z/xe4vQUwJRVO2FFG5AmlPuTv4NN/vXzlFMFtIUThFoLsYdXSEisj1Bq651UGRXTZhhbNlWVc7/0uYGZ9COy1eDTNtYuiE=

2.2.3 测试

1 git仓库准备

给cloud-config-git-repo仓库添加一个文件foobar-rsa.yml,文件内容如下:

2 Spring Cloud Config Server应用

启动microservice-config-server-encrypt-rsa项目,启动成功后。在浏览器中访问:http://localhost:7070/master/foobar-rsa.yml

响应页面如下,可见已经对远程的密文进行解密了,现在获取到的是明文cdd。

3 Spring Cloud Config Clinet应用

我们用microservice-config-client项目来测试,修改该项目的bootstrap.yml文件,截图如下:

整个bootstrap.yml文件内容如下:

server:
  port: 7071
  
spring:
  application:
    name: foobar  #与远程配置文件名称有关,可与下面的profile值,拼成foobar-dev 
  cloud:
    config:
      uri: http://localhost:7070
      profile: rsa
      label: master #当config server的后端存储是git时,默认是master

启动microservice-config-client项目(前提是microservice-config-server-encrypt-rsa也要启动),启动成功后。在浏览器中访问:

http://localhost:7071/profile,响应页面如下,可见也获取到了加密前的明文,到这里我们的非对称加密应用就完了。

最后记得把microservice-config-client项目还原哦。

3. 配置属性刷新

3.1 手动刷新

3.1.1 复制得到microservice-config-client-refresh

复制microservice-config-client项目重命名为microservice-config-client-refresh(至于如何复制这里不再赘述,请看eureka——实战中的 “2.4.1 创建可乐微服务” 的 “复制得到eureka-client-coke),导入到IDE工具中,项目结构截图如下:

3.1.2 修改pom文件

在pom文件中添加spring-boot-starter-actuator依赖,截图如下:

整个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 https://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.7.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<groupId>com.cdd.cloud</groupId>
	<artifactId>microservice-config-client-refresh</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-server-service-discover</name>
	<description>Demo project for Spring Boot</description>
 
	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
 
	<dependencies>
		<!-- config client所在的依赖 -->
		<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-config</artifactId>
 		</dependency>
 		
 		<!-- web依赖 -->
 		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<!-- 该依赖包含refresh节点 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		
 		<!-- test依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
	<!-- 引入spring cloud的依赖,不能少,主要用来管理Spring Cloud生态各组件的版本 -->
    <dependencyManagement>
	    <dependencies>
	      <dependency>
	        <groupId>org.springframework.cloud</groupId>
	        <artifactId>spring-cloud-dependencies</artifactId>
	        <version>Finchley.SR2</version>
	        <type>pom</type>
	        <scope>import</scope>
	      </dependency>
	    </dependencies>
  	</dependencyManagement>
 
	<!-- 添加spring-boot的maven插件,不能少,打jar包时得用 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
 
</project>

3.1.3 修改bootstrap.yml配置文件

在springboot2.0.*之后,很多端点都是不暴露的和springboot1.0.*有很大的区别,这是使用spring时很大的坑,不同的版本总是改来改去。

有关Spring Boot 1.x与2.x端点的差异,详见:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#endpoints

我们需要使用refresh端点,这是就要把它暴露出来。bootstrap.yml添加配置,截图如下:

整个bootstrap.yml文件内容如下:

server:
  port: 7071
  
spring:
  application:
    name: foobar  #与远程配置文件名称有关,可与下面的profile值,拼成foobar-dev 
  cloud:
    config:
      uri: http://localhost:7070
      profile: dev
      label: master #当config server的后端存储是git时,默认是master
      
management:
  endpoints:
    web:
      exposure:
        include: refresh    #暴露refresh端点

3.1.4 修改ConfigClientController类

给用到要刷新属性的bean上打@RefreshScope注解,这里我们给ConfigClientController类打上该注解,截图如下:

该类所有代码内容如下:

package com.cdd.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class ConfigClientController {
	
	// 把配置文件中profile属性值注入到该属性
	@Value("${profile}")
	private String profile;
	
	@GetMapping("/profile")
	public String getProfile() {
		return profile;
	}

}

3.1.4 测试

1 启动microservice-config-server、microservice-config-client-refresh,启动成功后在浏览器中输入:http://localhost:7071/profile

现在profile属性值为:foobar-dev-settings,如下图:

2 我们现在把远程git仓库cloud-config-git-repo的foobar-dev.yml文件里面的属性改为profile: foobar-dev-settings-refresh,

如下图:

3 利用curl(下载地址:https://curl.haxx.se/windows/)工具发送一个post方式的refresh请求,在dos窗口输入:

curl -X POST http://localhost:7071/actuator/refresh    

使用截图如下:

4 浏览中再次请求:http://localhost:7071/profile,响应页面如下,可以看出profile属性值已经变了。

3.2 自动刷新

3.2.1 下载安装rabbitMQ

在实战之前先要做一些准备工作,我们这里需要rabbitMQ,那么先要下载安装rabbitmq server和erlang。

1. 下载

rabbitmq server下载地址:https://www.rabbitmq.com/install-windows.html#installer,要下载的包截图如下:

erlang下载地址:https://www.erlang.org/downloads,要下载的包截图如下:

两个包下载好之后,如下图:

2 安装

(1)安装测试

先安装erlang,再安装rabbitmq server,rabbitmq server安装好,rabbitmq的服务就自动启动了,如下图:

或者在dos窗口输入:netstat -ano | findstr 4369,这个是rabbitmq默认端口,如下图:

(2)rabbitMQ图形化界面

如果想看下rabbitmq的图像化界面呢?可以这样做。访问https://www.rabbitmq.com/management.html#getting-started,在响应页面中找到下面命令。

rabbitmq-plugins enable rabbitmq_management

截图如下:

从电脑“开始”-> “所有程序”,找到RabbitMQ Command Prompt

点击进入dos窗口(也就是rabbitMQ server安装目录的\sbin目录下),把刚才找到的命令

rabbitmq-plugins enable rabbitmq_management 在这个dos窗口执行,如下图:

这时候在浏览器中输入:http://localhost:15672,响应页面如下,用户名和密码都是guest

登录进去,就是rabbitMQ的图形化界面,如下图:

到这里我们rabbitMQ安装好了,图形化界面也配置好了。

3.2.2全部刷新之手动刷新——测试rabbitMQ

参考官方文档:https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_quick_start_3 ,文档部分截图如下:

1 项目准备

(1)复制得到microservice-config-client-refresh-bus

复制microservice-config-client-refresh项目重命名为microservice-config-client-refresh-bus(至于如何复制这里不再赘述,请看eureka——实战中的 “2.4.1 创建可乐微服务” 的 “复制得到eureka-client-coke),导入到IDE工具中,项目结构截图如下:

(2)修改pom文件

在pom文件中添加spring-cloud-starter-bus-amqp依赖,截图如下:

整个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 https://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.7.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<groupId>com.cdd.cloud</groupId>
	<artifactId>microservice-config-client-refresh-bus</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-server-service-discover</name>
	<description>Demo project for Spring Boot</description>
 
	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
 
	<dependencies>
		<!-- config client所在的依赖 -->
		<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-config</artifactId>
 		</dependency>
 		
 		<!-- web依赖 -->
 		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<!-- 该依赖包含refresh节点 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		
		<!-- amq依赖 -->
		<dependency>
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-bus-amqp</artifactId>
 		</dependency>
		
 		<!-- test依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
	<!-- 引入spring cloud的依赖,不能少,主要用来管理Spring Cloud生态各组件的版本 -->
    <dependencyManagement>
	    <dependencies>
	      <dependency>
	        <groupId>org.springframework.cloud</groupId>
	        <artifactId>spring-cloud-dependencies</artifactId>
	        <version>Finchley.SR2</version>
	        <type>pom</type>
	        <scope>import</scope>
	      </dependency>
	    </dependencies>
  	</dependencyManagement>
 
	<!-- 添加spring-boot的maven插件,不能少,打jar包时得用 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
 
</project>

(3)修改bootstrap.yml文件

在bootstrap.yml文件中配置rabbitMQ的信息,截图如下:

整个bootstrap.yml文件内容如下:

server:
  port: 7071
  
spring:
  application:
    name: foobar  #与远程配置文件名称有关,可与下面的profile值,拼成foobar-dev 
  cloud:
    config:
      uri: http://localhost:7070
      profile: dev
      label: master #当config server的后端存储是git时,默认是master
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    
management:
  endpoints:
    web:
      exposure:
        include: 
        - refresh    #暴露refresh端点
        - bus-refresh #暴露bus-refresh端点

(4)启动查看

启动microservice-config-server项目,microservice-config-client-refresh-bus项目,把microservice-config-client-refresh-bus项目的端口号改为7072再启动一次。即,当前有spring cloud config server 1个实例,有spring cloud config client两个实例(端口号分别为7071,7072)。

都启动完成后,浏览器中分别输入:http://localhost:7071/profilehttp://localhost:7072/profile,响应页面都如下图:

此时,Spring cloud config client两个实例获取到的profile属性值都是foobar-dev-settings-refresh。

2 修改git仓库

现在我们把git仓库cloud-config-git-repo里面的文件foobar-dev.yml内容改为profile: foobar-dev-settings-refresh-bus ,如下图所示

3 curl刷新请求

接下从curl命令的bin目录进入dos窗口,执行请求

curl -X POST http://localhost:7071/actuator/bus-refresh

命令中的的localhost:7071是其中的一个config client实例。执行如下图:

接下来会看到控制台在不断打印日志,如下图:

4 测试是否全部刷新

在浏览器中分别返送请求:http://localhost:7071/profilehttp://localhost:7072/profile,响应页面都如下图:

说明Spring Cloud Config Client的2个实例全部刷新了。

3.2.2全部刷新之自动刷新

上面的手动刷新过程中,我们每次都通过curl 工具像向一个Spirng Cloud Config Client实例发送刷新请求。那么在git仓库更新后,怎么不用人工每次去发送这个刷新请求呢?

我们可以在github或gitee上配置一个webhook,如下图所示:

这样每次向该仓库推送一次数据时,就会自动发送刷新请求,我们的所有Spring Cloud Config Client就会全部启动刷新了。

到这里我们Spring Cloud Config属性配置这里就说完了。

发布了45 篇原创文章 · 获赞 28 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_41968788/article/details/103580110