文章目录

  • ​​1、Spring Cloud Config简介​​
  • ​​2、Config Server开发​​
  • ​​2.1 引入依赖​​
  • ​​2.2 在启动类上面开启统一配置中心服务​​
  • ​​2.3 创建远程仓库​​
  • ​​2.4 在统一配置中心服务中修改配置文件指向远程仓库地址​​
  • ​​2.5 启动统一配置中心服务​​
  • ​​2.6 拉取远端配置​​
  • ​​3、Config Client开发​​
  • ​​3.1 项目中引入config client依赖​​
  • ​​3.2 编写配置文件,告诉config server地址​​
  • ​​3.3 编写测试controller​​
  • ​​3.4 启动服务​​
  • ​​4、手动配置刷新​​
  • ​​4.1 说明​​
  • ​​4.2 在config client端加入刷新暴露端点​​
  • ​​4.3 在需要刷新代码的类中加入刷新配置的注解@RefreshScope​​
  • ​​4.4 启动微服务并访问​​
  • ​​4.5 修改远程配置​​
  • ​​4.6 手动调用刷新配置接口​​
  • ​​4.7 再次访问发现配置已经成功刷新​​

1、Spring Cloud Config简介

  Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含Client和Server两部分,Server提供配置文件地存储,以接口的形式将配置文件的内容提供出去;Client通过接口获取数据,并依据此数据初始化自己的应用。Spring Cloud Config使用Git或SVN存放配置文件,默认情况下使用Git。
Spring Cloud Config支持以下功能:

  • 提供服务端和客户端支持。
  • 集中管理各环境的配置文件。
  • 配置文件修改之后,可以快速生效。
  • 可以进行版本管理。
  • 支持大的并发查询。
  • 支持各种语言。
    统一配置中心组件流程图如下:

2、Config Server开发

2.1 引入依赖

<!--引入统一配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>

为了服务注册,我们将consul、actuator等等也引入

Spring Cloud Config_spring cloud

2.2 在启动类上面开启统一配置中心服务

Spring Cloud Config_配置文件_02

2.3 创建远程仓库

  创建仓库并复制远程仓库地址,这里我们创建公有仓库,如果是私有仓库的话必须在配置文件中指定用户名和密码。

https://gitee.com/interface_xiongtete/config.git

Spring Cloud Config_config_03


同时添加三个配置文件

configclient.properties:

server.port=8990
spring.application.name=CONFIGCLIENT


spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

configclient-dev.properties:

name=xiaosan

configclient-prod.properties:

name=xiaoming

2.4 在统一配置中心服务中修改配置文件指向远程仓库地址

server.port=8848
spring.application.name=CONFIGSERVER

#consul server
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

#远程仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/interface_xiongtete/config.git
#指定访问的分支
spring.cloud.config.server.git.default-label=master

#如果是私有库的话必须输入用户名和密码
#spring.cloud.config.server.git.username=
#spring.cloud.config.server.git.password=

Spring Cloud Config_spring_04

2.5 启动统一配置中心服务

Spring Cloud Config_config_05

2.6 拉取远端配置

http://localhost:8848/configclient-xxxx.properties

Spring Cloud Config_git_06

Spring Cloud Config_spring_07

http://localhost:8848/configclient-dev.properties

Spring Cloud Config_git_08

http://localhost:8848/configclient-prod.properties

Spring Cloud Config_spring cloud_09

3、Config Client开发

3.1 项目中引入config client依赖

<!--引入config client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

Spring Cloud Config_spring_10

3.2 编写配置文件,告诉config server地址

springboot官方提供了一种解决方案,就是在使用统一配置中心时应该将微服务的配置文件名修改为bootstrap.(properties|yml),bootstrap.properties作为配置启动项目时,会优先拉取远程配置,远程配置拉取成功之后根据远程配置启动当前应用。

新建bootstrap.properties配置文件

#config server地址
#开启统一配置中心服务
spring.cloud.config.discovery.enabled=true
#指定统一配置服务中心的服务唯一标识(根据服务id去服务注册中心获取)
spring.cloud.config.discovery.service-id=CONFIGSERVER

#配置注册中心
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

#指定从仓库的哪个分支拉取配置
spring.cloud.config.label=master
#指定拉取配置文件的名称
spring.cloud.config.name=configclient
#指定拉取配置文件的环境
spring.cloud.config.profile=prod


#开启所有web端点暴露
management.endpoints.web.exposure.include=*

Spring Cloud Config_spring cloud_11

3.3 编写测试controller

Spring Cloud Config_spring_12

3.4 启动服务

Spring Cloud Config_spring_13


从控制台的打印情况可看出configclient确实是从config server上拉取配置信息。

访问:​​http://localhost:8990/demo​

Spring Cloud Config_config_14


虽然测试没有问题,但是这种方式如果我们远程的配置文件修改的话,必须要重启微服务才能读取最新的配置,有没有更好的解决方案呢?当然,下面请看手动配置刷新的解决方案。

4、手动配置刷新

4.1 说明

  在生产环境中,微服务可能非常多,每次修改完远端配置之后,不可能对所有服务进行重新启动,这个时候需要让修改配置的服务能够刷新远端修改之后的配置,从而不要每次重启服务才能生效,进一步提高微服务系统的维护效率。在springcloud中也为我们提供了手动刷新配置和自动刷新配置两种策略,这里我们先使用手动配置文件刷新。
  当远端git仓库中配置发生变化时,不需要重启微服务就可以直接读取远端修改之后的配置信息。

4.2 在config client端加入刷新暴露端点

management.endpoints.web.exposure.include=*          #开启所有web端点暴露

Spring Cloud Config_git_15

4.3 在需要刷新代码的类中加入刷新配置的注解@RefreshScope

@RestController
@RefreshScope //作用:用来在不需要重启微服务的情况下,将当前scope域中信息刷新为最新配置信息
@Slf4j
public class DemoController {

@Value("${name}")
private String name;

@GetMapping("demo")
public String demo(){
log.info("demo OK!!!");
return "demo ok: "+name;
}

}

Spring Cloud Config_spring_16

4.4 启动微服务并访问

http://localhost:8990/demo

Spring Cloud Config_配置文件_17

4.5 修改远程配置

Spring Cloud Config_config_18


再次访问​​http://localhost:8990/demo​

Spring Cloud Config_配置文件_19


发现并没有自动刷新配置,必须调用刷新配置接口才能刷新配置。

4.6 手动调用刷新配置接口

使用postman或者curl工具发送post请求​​http://localhost:8990/actuator/refresh​

Spring Cloud Config_git_20

4.7 再次访问发现配置已经成功刷新

Spring Cloud Config_配置文件_21


Spring Cloud Config_git_22