Spring Cloud Config一文学会

简介: Spring Cloud Config一文学会

目录


1、简介


2、正文


2.1 Spring Cloud Config + 手动刷新


2.2 Spring Cloud Config + Git + WebHook实现自动刷新


2.3 Spring Cloud Config + Eureka


2.4 Spring Cloud Bus多端刷新


1、简介

传统配置的痛点:


在以前的项目中,我们通过配置文件、操作系统变量、Java系统属性等方式配置Java项目;在spring boot爆火之后我们的配置信息都写在application.yml或application.properties文件中,这些配置文件随着项目的打包与应用一起发布;但是当我们需要修改配置文件中的配置信息的时候,需要更新配置文件重新构建、重新发布;如果配置信息配置在操作系统环境变量或者Java系统属性中则需要重启应用。

配置文件中往往有一些敏感信息,比如数据库密码、Redis密码、加密秘钥等信息。这些信息如果直接配置在配置文件中,容易泄露。

针对这些问题,Spring Cloud早期发布了Spring Cloud Config进行集中式配置管理,成功解决了这些问题。

Spring Cloud Config分为Server端和Client端。其中Spring Cloud Config Server是Spring Cloud为指定应用中所有服务提供集中式配置的一个服务,借助Spring Cloud Config Server可以实现集中管理所有应用的配置,避免重复配置。

Spring Cloud Config带来了诸多好处:


配置文件与应用解耦,可以在不重启应用的前提下随时更新发布、回滚配置文件

不同的服务可以共享配置,这在微服务架构系统中非常有用,避免重复配置,大大降低了微服务配置的维护成本

配置与应用隔离之后,敏感信息得到保护

Spring Cloud Config Server通过Git仓库给微服务提供配置属性架构图:

image.png2、正文

正文通过Spring Boot项目展开对Spring Cloud Config的探讨。分别会有以下几个方面来展开:


Spring Cloud Config + Git手动刷新

Spring Cloud Config + Git + WebHook实现自动刷新

Spring Cloud Config + Eureka

Spring Cloud Bus多端刷新

注意整个项目的搭建是一步一步来的,重复的步骤不会重复出现。


2.1 Spring Cloud Config + 手动刷新

Spring Cloud Config Server

首先需要搭建Spring Cloud Config Server服务,Spring Cloud Config Server服务应该作为一个单独的应用运行和维护,所以我们单独为Spring Cloud Config Server启动一个服务。

依赖:

image.pngapplication.yml配置文件:

下面的配置文件中有几个点比较重要,配置错误将无法获取配置信息

a、default-label,配置文件所在分支,默认值为master

image.pngimage.pngimage.pngimage.pngapplication指应用名称,我们的配置文件名称应该严格按照application-{profile}.yml命名。

profile指环境信息,比如生产环境【prod】、开发环境【dev】、测试环境【test】

label指git分支,比如master

我这里使用的是第一种方式,这种方式能够返回详细的配置信息,以及分支信息、profile信息、应用名等,默认的分支名master可以省略。http://localhost:28888/userservice/dev等同于http://localhost:28888/userservice/dev/master


接下来就可以开始配置Spring Cloud Config Client

新建Spring Cloud Config Client服务,该服务会从Spring Cloud Config Server中获取配置信息。

依赖:image.png配置文件bootstrap.yml:

需要注意使用config获取配置信息时,我们需要将config相关配置提取到优先级最高的bootstrap.yml配置文件中,否则不会生效。spring-cloud-starter-config默认会访问8888端口,如果你的Spring Cloud Config Server并未使用该端口启动,可以在bootstrap.yml文件中指定Spring Cloud Config Server端口信息,这样才能覆盖,否则获取不到Spring Cloud Config Server上的配置信息。

我这里的配置文件演示了多环境dev和prod,注意我的config.uri地址时http://localhost:28888,并不是http://localhost:8888



image.png

server:
  port: 18888
spring:
  application:
    name: userservice
  profiles:
    active: dev
## 加载并暴露所有端点,用于或许刷新端点
management:
  endpoints:
    refresh:
      enabled: true
    web:
      exposure:
        include: '*'
## 配置中心无法访问,返回此数据
user:
  username: NaN
  password: NaN
---
spring:
  profiles: dev
  cloud:
    config:
      uri: http://localhost:28888
      label: master
      profile: dev
      fail-fast: true
---
spring:
  profiles: prod
  cloud:
    config:
      uri: http://localhost:28888
      label: master
      profile: prod
      fail-fast: true

image.pngimage.pngimage.png再次访问两个rest端点,发现两个请求返回的都是旧数据,并没有获取到最新的配置。别慌,没人通知他更新它肯定是旧数据呀!这个时候我们引入的actuator依赖和management.endpoints配置就派上用场了。

我们可以借助postman、curl等http工具向http://localhost:18888/actuator/refresh端点发起post请求。

image.png@Value 获取配置信息的方式并未获取到最新数据,而**@ConfigurationProperties **获取配置信息获取到了更新后的数据,所以我们在开发的时候记得使用@ConfigurationProperties来结合config获取配置信息。


2.2 Spring Cloud Config + Git + WebHook实现自动刷新

实现自动刷新的功能,我们需要借助两个东西;第一个是GitHub、Gitee、GitLab提供的WebHook功能,第二个是@RefreshScope注解。

第一步:配置WebHook(我这里采用的是Gitee)

进入你的配置文件所在仓库地址,选择管理页签之后选择WebHooks,点击添加WebHook

image.png注意URL中填写的是actuator提供的refresh端点,也就是我们上面用postman请求的地址,你可以选择你需要触发调用该地址的事件,一般选择Push。特别需要注意的是,你是要Gitee或GitHub需要提供一个公网地址,一般公司内部都会搭建GitLab代码仓库,公司内部可以使用内网地址。


第二步:添加@RefreshScope注解image.png2.3 Spring Cloud Config + Eureka

大部分情况下,在微服环境中我们都会使用配置中心,这里采用Eureka配置中心,结合Spring Cloud Config实现配置动态刷新。实现这个功能我们需要引入Eureka的依赖,启动一个注册中心服务,并修改Spring Cloud Config Server相关配置和Spring Cloud Config Client相关配置。

依赖:

————————————————

版权声明:本文为CSDN博主「李子捌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_41125219/article/details/121220522image.pngimage.pngimage.pngimage.pngimage.png

server:
  port: 18888
spring:
  application:
    name: userservice
  profiles:
    active: dev
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8888/eureka
  instance:
    prefer-ip-address: true
## 加载所有端点
management:
  endpoints:
    refresh:
      enabled: true
    web:
      exposure:
        include: '*'
## 配置中心无法访问,返回此数据
user:
  username: NaN
  password: NaN
---
spring:
  profiles: dev
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-service    # 配置Config Server服务名
      #      uri: http://localhost:28888
      label: master
      profile: dev
      fail-fast: true
---
spring:
  profiles: prod
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config-service
#      uri: http://localhost:28888
      label: master
      profile: prod
      fail-fast: true

image.png重新访问两个rest端点,可以效果一致。如果需要配置Eureka的高可用集群,在我的《Spring Cloud系列专栏》中有文章可以参考。


2.4 Spring Cloud Bus多端刷新

在生产环境中,我们往往会集群部署,此时我使用WebHook来刷新单个端点就显得很鸡肋了。这个时候我们可以使用Spring Cloud Bus来实现多端刷新。它是通过Message Queue来广播配置更新通知来实现的。

官方介绍地址:


Spring Cloud Bus


我们先安装RabbitMQ来使用Spring Cloud Bus(官方支持rabbit和kafka)

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

目录
打赏
0
0
0
0
10
分享
相关文章
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
35 6
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
52 5
|
1月前
|
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
40 5
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
简化配置管理:Spring Cloud Config与Netflix OSS中的动态配置解决方案
61 2
Spring Cloud Config、Apollo、Nacos和Archaius对比
这篇文章对比了Spring Cloud Config、Apollo、Nacos和Archaius这四种配置中心的适应场景、优缺点。文中讨论了它们的功能特点,例如Spring Cloud Config的集中化配置管理和动态刷新能力,Apollo的实时配置推送和权限治理,Nacos的服务发现和管理功能,以及Archaius的动态配置更新能力。文章指出选择配置中心应根据项目需求和架构来决定,并提供了一个对比图来帮助读者更直观地理解这些工具的差异。
150 1
Spring Cloud Config、Apollo、Nacos和Archaius对比
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
616 15
|
6月前
|
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
132 3
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
85 0
通用快照方案问题之Spring Boot Admin的定义如何解决
通用快照方案问题之Spring Boot Admin的定义如何解决
72 0
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
通用快照方案问题之Martin Flower提出的微服务之间的通信如何解决
45 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等