Spring Cloud入门-Config分布式配置中心(Hoxton版本)

2022年9月18日10:14:54

项目使用的Spring Cloud为Hoxton版本,Spring Boot为2.2.2.RELEASE版本

Spring Cloud入门系列汇总

序号 内容 链接地址
1 Spring Cloud入门-十分钟了解Spring Cloud https://blog.csdn.net/ThinkWon/article/details/103715146
2 Spring Cloud入门-Eureka服务注册与发现(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103726655
3 Spring Cloud入门-Ribbon服务消费者(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103729080
4 Spring Cloud入门-Hystrix断路器(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103732497
5 Spring Cloud入门-Hystrix Dashboard与Turbine断路器监控(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103734664
6 Spring Cloud入门-OpenFeign服务消费者(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103735751
7 Spring Cloud入门-Zuul服务网关(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103738851
8 Spring Cloud入门-Config分布式配置中心(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103739628
9 Spring Cloud入门-Bus消息总线(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103753372
10 Spring Cloud入门-Sleuth服务链路跟踪(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103753896
11 Spring Cloud入门-Consul服务注册发现与配置中心(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103756139
12 Spring Cloud入门-Gateway服务网关(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103757927
13 Spring Cloud入门-Admin服务监控中心(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103758697
14 Spring Cloud入门-Oauth2授权的使用(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103761687
15 Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103763364
16 Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103766368
17 Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103769680
18 Spring Cloud入门-Sentinel实现服务限流、熔断与降级(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103770879
19 Spring Cloud入门-Seata处理分布式事务问题(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103786102
20 Spring Cloud入门-汇总篇(Hoxton版本) https://blog.csdn.net/ThinkWon/article/details/103786588

摘要

Spring Cloud Config 可以为微服务架构中的应用提供集中化的外部配置支持,它分为服务端和客户端两个部分,本文将对其用法进行详细介绍。

Spring Cloud Config 简介

Spring Cloud Config 分为服务端和客户端两个部分。服务端被称为分布式配置中心,它是个独立的应用,可以从配置仓库获取配置信息并提供给客户端使用。客户端可以通过配置中心来获取配置信息,在启动时加载配置。Spring Cloud Config 的配置中心默认采用Git来存储配置信息,所以天然就支持配置信息的版本管理,并且可以使用Git客户端来方便地管理和访问配置信息。

在Git仓库中准备配置信息

由于Spring Cloud Config 需要一个存储配置信息的Git仓库,这里我们先在Git仓库中添加好配置文件再演示其功能,Git仓库地址为:https://gitee.com/JourWon/springcloud-config

配置仓库目录结构

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

master分支下的配置信息

config-dev.yml:

config:info:"config info for dev(master)"

config-test.yml:

config:info:"config info for test(master)"

config-prod.yml:

config:info:"config info for prod(master)"

dev分支下的配置信息

config-dev.yml:

config:info:"config info for dev(dev)"

config-test.yml:

config:info:"config info for test(dev)"

config-prod.yml:

config:info:"config info for prod(dev)"

创建config-server模块

这里我们创建一个config-server模块来演示Spring Cloud Config 作为配置中心的功能。

在pom.xml中添加相关依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

在application.yml中进行配置

server:port:8901spring:application:name: config-servercloud:config:server:git:# 配置存储配置信息的Git仓库uri: https://gitee.com/JourWon/springcloud-config.gitusername: JourWonpassword:123456# 开启启动时直接从git获取配置clone-on-start:true# 获取子目录下的配置#          search-paths: '{application}'eureka:client:register-with-eureka:truefetch-registry:trueservice-url:defaultZone: http://localhost:8001/eureka/

在启动类上添加@EnableConfigServer注解来启用配置中心功能

@EnableConfigServer@EnableDiscoveryClient@SpringBootApplicationpublicclassConfigServerApplication{publicstaticvoidmain(String[] args){
        SpringApplication.run(ConfigServerApplication.class, args);}}

通过config-server获取配置信息

这里我们通过config-server来演示下如何获取配置信息。

获取配置文件信息的访问格式

# 获取配置信息
/{label}/{application}-{profile}
# 获取配置文件信息
/{label}/{application}-{profile}.yml

占位符相关解释

  • application:代表应用名称,默认为配置文件中的spring.application.name,如果配置了spring.cloud.config.name,则为该名称;
  • label:代表分支名称,对应配置文件中的spring.cloud.config.label;
  • profile:代表环境名称,对应配置文件中的spring.cloud.config.profile。

获取配置信息演示

启动eureka-server、config-server服务;

访问http://localhost:8901/master/config-dev来获取master分支上dev环境的配置信息;

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

访问http://localhost:8901/master/config-dev.yml来获取master分支上dev环境的配置文件信息,对比上面信息,可以看出配置信息和配置文件信息并不是同一个概念;

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

访问http://localhost:8901/master/config-test.yml来获取master分支上test环境的配置文件信息:

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

访问http://localhost:8901/dev/config-dev.yml来获取dev分支上dev环境的配置文件信息:

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

创建config-client模块

我们创建一个config-client模块来从config-server获取配置。

在pom.xml中添加相关依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

在bootstrap.yml中进行配置

server:port:9001spring:application:name: config-clientcloud:# config客户端配置config:# 分支名称label: master# 启用配置后缀名称profile: dev# 配置文件名称name: config# 配置中心地址uri: http://localhost:8901eureka:client:register-with-eureka:truefetch-registry:trueservice-url:defaultZone: http://localhost:8001/eureka/

添加ConfigClientController类用于获取配置

@RestControllerpublicclassConfigClientController{@Value("${config.info}")private String configInfo;@GetMapping("/configInfo")public StringgetConfigInfo(){return configInfo;}}

演示从配置中心获取配置

启动eureka-server、config-server、config-client服务

访问http://localhost:9001/configInfo,可以获取到dev分支下dev环境的配置;

config info for dev(master)

获取子目录下的配置

我们不仅可以把每个项目的配置放在不同的Git仓库存储,也可以在一个Git仓库中存储多个项目的配置,此时就会用到在子目录中搜索配置信息的配置。

首先我们需要在config-server中添加相关配置,用于搜索子目录中的配置,这里我们用到了application占位符,表示对于不同的应用,我们从对应应用名称的子目录中搜索配置,比如config子目录中的配置对应config应用;

spring:cloud:config:server:git:search-paths:'{application}'

访问http://localhost:9001/configInfo进行测试,可以发现获取的是config子目录下的配置信息。

config info for config dir dev(master)

刷新配置

当Git仓库中的配置信息更改后,我们可以通过SpringBoot Actuator的refresh端点来刷新客户端配置信息,以下更改都需要在config-client中进行。

在pom.xml中添加Actuator的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

在bootstrap.yml中开启refresh端点:

management:endpoints:web:exposure:include:'refresh'

在ConfigClientController类添加@RefreshScope注解用于刷新配置:

@RefreshScope@RestControllerpublicclassConfigClientController{@Value("${config.info}")private String configInfo;@GetMapping("/configInfo")public StringgetConfigInfo(){return configInfo;}}

重新启动config-client后,调用refresh端点进行配置刷新:

使用post请求http://localhost:9001/actuator/refresh

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

访问http://localhost:9001/configInfo进行测试,可以发现配置信息已经刷新。

update config info for config dir dev(master)

配置中心添加安全认证

我们可以通过整合SpringSecurity来为配置中心添加安全认证。

创建config-security-server模块

在pom.xml中添加相关依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

在application.yml中进行配置:

server:port:8905spring:application:name: config-security-servercloud:config:server:git:uri: https://gitee.com/JourWon/springcloud-config.gitusername: JourWonpassword:123456clone-on-start:truesecurity:user:# 配置用户名和密码name: rootpassword:123456

启动config-security-server服务。

修改config-client的配置

添加bootstrap-security.yml配置文件,主要是配置了配置中心的用户名和密码:

server:port:9002spring:application:name: config-clientcloud:# config客户端配置config:# 分支名称label: master# 启用配置后缀名称profile: dev# 配置文件名称name: config# 配置中心地址uri: http://localhost:8905username: rootpassword:123456eureka:client:register-with-eureka:truefetch-registry:trueservice-url:defaultZone: http://localhost:8001/eureka/

使用bootstrap-security.yml启动config-client服务;

访问http://localhost:9002/configInfo进行测试,发现可以获取到配置信息。

config info for dev(master)

config-sever集群搭建

在微服务架构中,所有服务都从配置中心获取配置,配置中心一旦宕机,会发生很严重的问题,下面我们搭建一个双节点的配置中心集群来解决该问题。

启动两个config-server分别运行在8902和8903端口上;

添加config-client的配置文件bootstrap-cluster.yml,主要是添加了从注册中心获取配置中心地址的配置并去除了配置中心uri的配置:

server:port:9003spring:application:name: config-clientcloud:# config客户端配置config:# 分支名称label: master# 启用配置后缀名称profile: dev# 配置文件名称name: config# config-sever集群搭建discovery:enabled:trueservice-id: config-servereureka:client:register-with-eureka:truefetch-registry:trueservice-url:defaultZone: http://localhost:8001/eureka/

以bootstrap-cluster.yml启动config-client服务,注册中心显示信息如下:

Spring Cloud入门-Config分布式配置中心(Hoxton版本)

访问http://localhost:9003/configInfo,发现config-client可以获取到配置信息。

config info for config dir dev(master)

使用到的模块

springcloud-learning
├── eureka-server -- eureka注册中心
├── config-server -- 配置中心服务
├── config-security-server -- 带安全认证的配置中心服务
└── config-client -- 获取配置的客户端服务

项目源码地址

GitHub项目源码地址

  • 作者:ThinkWon
  • 原文链接:https://thinkwon.blog.csdn.net/article/details/103739628
    更新时间:2022年9月18日10:14:54 ,共 8826 字。