在这里插入图片描述

🔎这里是【秒懂·云原生】,关注我学习云原生不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。

👀本期介绍

主要介绍Spring Cloud —— 分布式配置组件


在分布式微服务系统中,几乎所有服务的运行都离不开
配置文件的支持,这些配置文件通常由各个服务自行管
理,以 properties 或 yml 格式保存在各个微服务的类路
径下,例如 application.properties 或 application.yml
等。
这种将配置文件散落在各个服务中的管理方式,存在以
下问题:

  • 管理难度大:配置文件散落在各个微服务中,难以管 理。
  • 安全性低:配置跟随源代码保存在代码库中,容易造 成配置泄漏。
  • 时效性差:微服务中的配置修改后,必须重启服务, 否则无法生效。
  • 局限性明显:无法支持动态调整,例如日志开关、功 能开关。

为了解决这些问题,通常我们都会使用配置中心对配置
进行统一管理。市面上开源的配置中心有很多,例如百
度的 Disconf、淘宝的 diamond、360 的 QConf、携程
的 Apollo 等都是解决这类问题的。Spring Cloud 也有自
己的分布式配置中心,那就是 Spring Cloud Config。

Spring Cloud Config

Spring Cloud Config 是由 Spring Cloud 团队开发的项
目,它可以为微服务架构中各个微服务提供集中化的外
部配置支持。
简单点说就是,Spring Cloud Config 可以将各个微服务
的配置文件集中存储在一个外部的存储仓库或系统(例
如 Git 、SVN 等)中,对配置的统一管理,以支持各个
微服务的运行。
Spring Cloud Config 包含以下两个部分:

  • Config Server:也被称为分布式配置中心,它是一个 独立运行的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密信息和解密信息的访问接 口。
  • Config Client:指的是微服务架构中的各个微服务, 它们通过 Config Server 对配置进行管理,并从 ConfigSever 中获取和加载配置信息。

Spring Cloud Config 默认使用 Git 存储配置信息,因此
使用 Spirng Cloud Config 构建的配置服务器天然就支
持对微服务配置的版本管理。我们可以使用 Git 客户端
工具方便地对配置内容进行管理和访问。除了 Git 外,
Spring Cloud Config 还提供了对其他存储方式的支持,
例如 SVN、本地化文件系统等。

Spring Cloud Config 工作原理

Spring Cloud Config 工作原理如下图。
在这里插入图片描述
Spring Cloud Config 工作流程如下:

  • 开发或运维人员提交配置文件到远程的 Git 仓库。
  • Config 服务端(分布式配置中心)负责连接配置仓库
    Git,并对 Config 客户端暴露获取配置的接口。
  • Config 客户端通过 Config 服务端暴露出来的接口,
    拉取配置仓库中的配置。
  • Config 客户端获取到配置信息,以支持服务的运行。

Spring Cloud Config 的特点

Spring Cloud Config 具有以下特点:

  • Spring Cloud Config 由 Spring Cloud 团队开发,可 以说是 Spring 的亲儿子,能够与 Spring的生态体系 无缝集成。
  • Spring Cloud Config 将所有微服务的配置文件集中 存储在一个外部的存储仓库或系统(例如 Git)中, 统一管理。
  • Spring Cloud Config 配置中心将配置以 REST 接口的 形式暴露给各个微服务,以方便各个微服务获取。
  • 微服务可以通过 Spring Cloud Config 向配置中心统 一拉取属于它们自己的配置信息。
  • 当配置发生变化时,微服务不需要重启即可感知到配 置的变化,并自动获取和应用最新配置。
  • 一个应用可能有多个环境,例如开发(dev)环境、 测试(test)环境、生产(prod)环境等等,开发人 员可以通过 Spring Cloud Config 对不同环境的各配 置进行管理,且能够确保应用在环境迁移后仍然有完 整的配置支持其正常运行。

搭建 Config 服务端

  1. 在gitee上创建一个名为springcloud-config的仓库
    (Repository)并获取该仓库的地址
  2. 在父工程下创建子模块ws-config并添加 Spring
    Cloud Config 服务端依赖
<dependency> <groupId>org.springframework.boot</group Id> <artifactId>spring-boot-starter- web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</grou pId> <artifactId>spring-cloud-starter- netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</grou pId> <artifactId>spring-cloud-config- server</artifactId> </dependency>
  1. 配置applycation.yml
server:
  port: 1001
spring:
 application:
   name: spring-cloud-config-center #服务 名
 cloud:
   config:
    server:
     git:# 码云(gitee)地址 uri: https://gitee.com/nieps/springcloud- config.git
       uri: https://gitee.com/nieps/springcloud-config.git#仓库名
       search-paths: - springcloud-config 
       force-pull: true # 如果Git仓库为公开仓库,可以不填写用 户名和密码,如果是私有仓库需要填写 # username: ******** # password: ******** #分支名 
    label: master 
eureka:
 client:
  service-url:
   defaultZone: http://admin:1357@localhost:8761/eureka #将服务注册到 Eureka
  1. 主启动类上,使用 @EnableConfigServer 注解开
    启 Spring Cloud Config 配置中心功能
@SpringBootApplication 
@EnableConfigServer 
public class App { 
public static void main( String[] args ){ 
SpringApplication.run(App.class,args);
 } 
 }
  1. 新建一个config-dev.yml 的文件,并将其上传到
    springcloud-config 仓库 master 分支下,如
erp:
 db:
  username: root
  password: 1357
  1. 启动注册中心和配置服务,访问http://localhost:1
    001/master/config-dev.yml
    在这里插入图片描述
    Spring Cloud Config 规定了一套配置文件访问规
    则,如下:
/{application}/{profile}[/{label}] 
/{application}-{profile}.yml 
/{label}/{application}-{profile}.yml 
/{application}-{profile}.properties 
/{label}/{application}- {profile}.properties

访问规则内各参数说明如下。
{application}:应用名称,即配置文件的名称,
例如 config-dev。
{profile}:环境名,一个项目通常都有开发
(dev)版本、测试(test)环境版本、生产
(prod)环境版本,配置文件则以
application-{profile}.yml 的形式进行区分,例
如 application-dev.yml、applicationtest.yml、application-prod.yml 等。
{label}:Git 分支名,默认是 master 分支,当
访问默认分支下的配置文件时,该参数可以省
略,即第二种访问方式。
通过这套规则,我们在浏览器上就直接对配置文件
进行访问。

搭建 Config 客户端

  1. 在微服务下增加依赖
<!--Spring Cloud Config 客户端依赖--> <dependency> <groupId>org.springframework.cloud</grou pId> <artifactId>spring-cloud- starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</grou pId> <artifactId>spring-cloud-starter- bootstrap</artifactId> </dependency>

Spring Cloud 新版本默认将 Bootstrap 禁用,需
要将 spring-cloud-starter-bootstrap 依赖引入到
工程

  1. 新增配置文件bootstrap.yml增加如下配置

bootstrap.yml 是系统级别的,加载优先级高于
application.yml ,负责从外部加载配置并解析

spring:
 cloud:
  config:
   label: master #分支名称 
   name: config #配置文件名称,config- dev.yml 中的 config 
   profile: dev #环境名 config-dev.yml 中的 dev#这里不要忘记添加 http:// 否则无法读取 
   uri: http://localhost:1001 #Spring Cloud Config 服务端(配置中心)地址

3.读取配置文件

@RestController 
public class ConfigClientController { 
@Value("${erp.db.username}") 
private String username; 
@Value("${erp.db.password}") 
private String password; 
@GetMapping(value = "/getConfig") 
public String getConfig() {

return "数据库信息:" + username + " <br/>password:" + password + "<br/>" ; 
} 
}

访问控制类测试http://localhost/getConfig
在这里插入图片描述

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐