【微服务】Spring Cloud Config解决的问题和案例

文章目录

      • 强烈推荐
      • 引言
      • 解决问题
        • 1. 配置管理的集中化
        • 2. 配置的版本控制
        • 3. 环境特定配置
        • 4. 配置的动态刷新
        • 5. 安全管理敏感数据
        • 6. 配置的一致性
      • 组件
        • 1. **配置服务器(Config Server)**
        • 2. **配置客户端(Config Client)**
      • 配置示例
        • 配置服务器(application.yml)
        • 配置客户端(bootstrap.yml)
      • 工作原理
      • 示例场景
        • 场景 1:多个环境配置管理
          • 示例
            • Git 仓库中的配置文件结构:
            • application.yml (通用配置):
            • application-dev.yml (开发环境配置):
            • application-test.yml (测试环境配置):
            • application-prod.yml (生产环境配置):
            • 配置客户端(bootstrap.yml):
        • 场景 2:配置变更的自动传播
          • 示例
            • 更新前的 application-prod.yml:
            • 更新后的 application-prod.yml:
            • 触发配置刷新
        • 场景 3:安全管理
          • 示例
            • Git 仓库中的配置文件:
            • application.yml(使用加密值):
            • 配置服务器的 application.yml:
            • 配置客户端(bootstrap.yml):
            • 应用程序代码示例:
      • 常用的参数说明
        • 配置服务器(Config Server)
          • Git 仓库配置
          • 本地文件系统配置
        • 配置客户端(Config Client)
        • 示例配置文件
          • 配置服务器(application.yml)
          • 配置客户端(bootstrap.yml)
      • 总结
      • 强烈推荐
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


引言

Spring Cloud Config 是 Spring Cloud 套件中的一个工具,提供了在分布式系统中对外部化配置的服务器端和客户端支持。


解决问题

Spring Cloud Config 主要解决以下几个问题:

1. 配置管理的集中化

在一个分布式系统中,管理多个微服务的配置是一个挑战。Spring Cloud Config 提供了一个集中化的配置管理解决方案,将所有微服务的配置存储在一个中央仓库(例如 Git 仓库)中,从而简化了配置的管理和维护。

2. 配置的版本控制

通过将配置文件存储在 Git 等版本控制系统中,Spring Cloud Config 支持配置的版本控制。每次更改配置都会被记录,允许回滚到以前的版本。这对于追踪配置变更和恢复到稳定状态非常有用。

3. 环境特定配置

不同环境(如开发、测试、生产)可能需要不同的配置。Spring Cloud Config 支持根据环境动态加载配置文件,使得在不同环境中部署和运行应用程序更加方便和可靠。

4. 配置的动态刷新

Spring Cloud Config 支持在运行时动态刷新配置,而无需重新启动应用程序。这意味着当配置发生变化时,应用程序可以立即使用新的配置,从而减少停机时间和提高系统的灵活性。

5. 安全管理敏感数据

在配置文件中存储敏感数据(如密码、API 密钥)是一个安全风险。Spring Cloud Config 提供了加密和解密功能,确保敏感数据在传输和存储过程中是安全的。

6. 配置的一致性

在分布式系统中,确保所有服务使用相同的配置是一个挑战。Spring Cloud Config 提供了一个中央服务器来提供配置,确保所有服务从同一来源获取配置,从而保持配置的一致性。


组件

1. 配置服务器(Config Server)

配置服务器是一个集中管理所有环境中应用程序外部属性的地方。它从各种来源(最常见的是 Git 仓库)提供配置。

配置

  • spring.cloud.config.server.git.uri 指定 Git 仓库的位置。

  • spring.cloud.config.server.git.clone-on-start 在服务器启动时克隆仓库。

2. 配置客户端(Config Client)

需要从配置服务器获取配置的应用程序充当配置客户端。它们通常是从配置服务器提取配置属性的 Spring Boot 应用程序。

配置

  • spring.cloud.config.uri 指定配置服务器的位置。
  • spring.application.namespring.profiles.active 帮助客户端获取适当的配置文件。

配置示例

配置服务器(application.yml)
server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo
          searchPaths: application, profile-specific
          clone-on-start: true

配置客户端(bootstrap.yml)
spring:
  cloud:
    config:
      uri: http://localhost:8888
  application:
    name: my-app
  profiles:
    active: development

工作原理

  1. 启动
    • 配置服务器克隆指定的 Git 仓库并提供配置文件。
    • 配置客户端在启动时联系配置服务器以检索其配置属性。
  2. 配置检索
    • 配置客户端使用唯一的应用程序名称和配置文件(环境)进行标识。
    • 配置服务器响应适用于该应用程序和配置文件的配置文件。
  3. 动态刷新
    • 使用 Spring Cloud Bus,客户端可以在不重启的情况下刷新其配置。通常通过向总线发送刷新事件来实现,这些事件会传播到所有客户端。

示例场景

场景 1:多个环境配置管理

在一个企业中,开发、测试、和生产环境需要不同的配置。通过 Spring Cloud Config,可以将这些配置存储在 Git 仓库中,并根据当前运行的环境动态加载相应的配置文件。

示例

假设有一个名为 my-app 的应用程序需要在开发、测试和生产环境中运行,每个环境都有不同的数据库连接配置。

Git 仓库中的配置文件结构:
config-repo/
  my-app/
    application.yml
    application-dev.yml
    application-test.yml
    application-prod.yml
application.yml (通用配置):
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
application-dev.yml (开发环境配置):
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/devdb
    username: devuser
    password: devpass
application-test.yml (测试环境配置):
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb
    username: testuser
    password: testpass
application-prod.yml (生产环境配置):
spring:
  datasource:
    url: jdbc:mysql://prod-db-server:3306/proddb
    username: produser
    password: prodpass
配置客户端(bootstrap.yml):
spring:
  application:
    name: my-app
  profiles:
    active: dev  # 可根据环境修改为 dev, test, 或 prod
spring:
  cloud:
    config:
      uri: http://localhost:8888

my-app 在不同环境中启动时,它会根据 spring.profiles.active 动态加载相应的配置文件。

场景 2:配置变更的自动传播

假设在生产环境中需要更新某个服务的数据库连接字符串。使用 Spring Cloud Config,可以在 Git 仓库中更新配置文件,然后通知所有相关服务刷新配置,这样就可以在不中断服务的情况下应用新的配置。

示例

假设在生产环境中需要更新数据库连接字符串。

更新前的 application-prod.yml:
spring:
  datasource:
    url: jdbc:mysql://prod-db-server:3306/proddb
    username: produser
    password: prodpass
更新后的 application-prod.yml:
yaml复制代码spring:
  datasource:
    url: jdbc:mysql://new-prod-db-server:3306/proddb
    username: produser
    password: newprodpass
触发配置刷新
  1. 更新 Git 仓库中的配置文件。

  2. 发送 POST 请求到 Spring Cloud Bus 以刷新配置:

    shell
    复制代码
    curl -X POST http://localhost:8080/actuator/bus-refresh
    

应用程序将自动获取新的配置,无需重启。

场景 3:安全管理

一个服务需要访问第三方 API,并且需要使用 API 密钥。将 API 密钥加密后存储在配置文件中,并使用 Spring Cloud Config 提供的解密功能来读取密钥,从而提高安全性。

示例

假设有一个名为 my-secure-app 的应用程序需要访问第三方 API,并且需要使用 API 密钥。

Git 仓库中的配置文件:
config-repo/
  my-secure-app/
    application.yml
application.yml(使用加密值):
api:
  key: {cipher}AQBvcVzJzpI...
配置服务器的 application.yml:
encrypt:
  key: my-symmetric-key  # 对称密钥
配置客户端(bootstrap.yml):
yaml复制代码spring:
  application:
    name: my-secure-app
spring:
  cloud:
    config:
      uri: http://localhost:8888
应用程序代码示例:
@RestController
public class ApiController {

    @Value("${api.key}")
    private String apiKey;

    @GetMapping("/api-key")
    public String getApiKey() {
        return apiKey;
    }
}

在这个示例中,API 密钥在 Git 仓库中是加密的,并且通过配置服务器和客户端的集成,在运行时自动解密并注入到应用程序中。


常用的参数说明

在使用 Spring Cloud Config 时,有一些常用的参数需要了解和配置。这些参数帮助你控制 Config Server 和 Config Client 的行为。以下是一些常用的参数及其说明:

配置服务器(Config Server)
Git 仓库配置
  • spring.cloud.config.server.git.uri:

    • 说明: 指定 Git 仓库的 URI。
    • 示例: spring.cloud.config.server.git.uri=https://github.com/your-repo/config-repo
  • spring.cloud.config.server.git.clone-on-start:

    • 说明: 在服务器启动时克隆 Git 仓库。
    • 示例: spring.cloud.config.server.git.clone-on-start=true
  • spring.cloud.config.server.git.searchPaths:

    • 说明: 配置文件的搜索路径,可以指定多个路径。
    • 示例: spring.cloud.config.server.git.searchPaths=application,profile-specific
  • spring.cloud.config.server.git.usernamespring.cloud.config.server.git.password:

    • 说明: 用于访问受保护的 Git 仓库的凭证。

    • 示例:

      spring:
        cloud:
          config:
            server:
              git:
                username: your-username
                password: your-password
      
  • spring.cloud.config.server.git.default-label:

    • 说明: 指定要使用的默认 Git 分支或标签。

    • 示例: spring.cloud.config.server.git.default-label=main

本地文件系统配置
  • spring.cloud.config.server.native.searchLocations:

    • 说明: 指定本地文件系统中配置文件的位置。

    • 示例: spring.cloud.config.server.native.searchLocations=file:///path/to/config

配置客户端(Config Client)
  • spring.cloud.config.uri:

    • 说明: 指定 Config Server 的 URI。
    • 示例: spring.cloud.config.uri=http://localhost:8888
  • spring.application.name:

    • 说明: 配置客户端的应用程序名称,用于在 Config Server 中查找对应的配置文件。
    • 示例: spring.application.name=my-app
  • spring.profiles.active:

    • 说明: 指定当前激活的配置文件,用于加载对应环境的配置。
    • 示例: spring.profiles.active=development
  • spring.cloud.config.label:

    • 说明: 指定要使用的 Git 分支或标签。
    • 示例: spring.cloud.config.label=main
  • spring.cloud.config.usernamespring.cloud.config.password:

    • 说明: 用于访问受保护的 Config Server 的凭证。

    • 示例

      :

      spring:
        cloud:
          config:
            username: your-username
            password: your-password
      
  • spring.cloud.config.retry.enabled:

    • 说明: 启用或禁用客户端重试配置服务器连接的功能。
    • 示例: spring.cloud.config.retry.enabled=true
  • spring.cloud.config.fail-fast:

    • 说明: 配置客户端在启动时如果无法连接到配置服务器是否立即失败。
    • 示例: spring.cloud.config.fail-fast=true
  • spring.cloud.config.overrideNone:

    • 说明: 指定如果本地配置文件存在,不覆盖它们。
    • 示例: spring.cloud.config.overrideNone=true
  • spring.cloud.config.overrideSystemProperties:

    • 说明: 指定是否覆盖系统属性。

    • 示例: spring.cloud.config.overrideSystemProperties=false

示例配置文件
配置服务器(application.yml)
server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo
          searchPaths: application,profile-specific
          clone-on-start: true
          default-label: main
          username: your-username
          password: your-password
配置客户端(bootstrap.yml)
spring:
  application:
    name: my-app
  profiles:
    active: development
  cloud:
    config:
      uri: http://localhost:8888
      label: main
      username: your-username
      password: your-password
      retry:
        enabled: true
      fail-fast: true

总结

Spring Cloud Config 在分布式系统的配置管理中发挥着至关重要的作用。

通过集中化配置管理、环境特定配置、版本控制、动态更新和安全管理等功能,Spring Cloud Config 提高了配置管理的效率和安全性,简化了微服务架构下的配置管理流程。

理解和正确配置这些参数,可以有效地管理和维护系统的配置


强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn


专栏集锦

大佬们可以收藏以备不时之需:

Spring Boot 专栏:http://t.csdnimg.cn/peKde

ChatGPT 专栏:http://t.csdnimg.cn/cU0na

Java 专栏:http://t.csdnimg.cn/YUz5e

Go 专栏:http://t.csdnimg.cn/Jfryo

Netty 专栏:http://t.csdnimg.cn/0Mp1H

Redis 专栏:http://t.csdnimg.cn/JuTue

Mysql 专栏:http://t.csdnimg.cn/p1zU9

架构之路 专栏:http://t.csdnimg.cn/bXAPS


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

如果有项目或者毕设合作,请联系下方微信,备注项目合作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/800732.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑数据恢复软件哪个好?这六款软件轻松恢复数据

随着电脑使用的日益频繁,数据的丢失也成为了一个不可避免的问题。在生活中,我们常因误删除、误格式化、分区失败、中病毒等而丢失数据。在这种情况下,一个好的数据恢复软件就显得尤为重要。 电脑数据恢复软件哪个好?本文将为大家…

Midjourney 商业实战案例(附AI学习工具教程资料)

前言 Midjourney 商业实战案例 (附AI学习工具教程资料) 如何把 AI 绘画应用到设计工作中? AI 绘画技术可以应用于设计工作中,帮助设计师更快速、更高效地完成设计工作,以下是一些常见的应用: **1. 快速…

对接企业微信API自建应用配置企业可信IP

前言 为了实现系统调用团队会议功能,组织发起企业微信会议,于是需要和企业微信做API对接。对接过程很难受,文档不清晰、没有SDK、没有技术支持甚至文档报文和实际接口报文都不匹配,只能说企业微信的API是从业以来见过的最难用的AP…

【数据结构与算法 经典例题】判断二叉树是否对称

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 目录 一、问题描述 二、解题思路 三、C语言实现代码 一、问题描述 给你一个二…

ENSP中NAT的相关实验(两个私网,一个公网)

题目 实验需求 1.按照图示配置IP地址,公网地址100.1.1.1/24 2.私网A通过NAPT,使R1接入到互联网,私网B通过EASY IP,使R3接入到互联网 3.私网A配置NAT SERVER把Telnet的Telnet服务发布到公网,使PC2可以访问 三、实验…

Vue中使用mind-map实现在线思维导图

概述 在前面的文章Vue中实现在线画流程图实现中介绍了流程图的在线绘制,在本文,给大家分享一下基于mind-map实现在线的思维导图,并实现:1. 导图导出为图片;2. 打开xmind文件。 实现效果 实现 1. mind-map简介 simp…

随笔(三):CSS

一、CSS .(类选择器)和 #(ID选择器)在CSS中的主要区别在于它们的选择范围和用途: 1. 选择范围 类选择器(. 开头): 类选择器用于选择具有指定类名的所有HTML元素。由于一个HTML元素…

spring boot基础知识

spring boot是整合spring 一系列的包的坐标集合 对依赖进行整合 总体介绍 spring boot是用来方便构建项目的工具 spring cloud是用来方便spring boot项目之间进行数据交互通讯和配置的 spring cloud data Flow 是用来进行数据的连接的 Spring 缺点 配置繁琐 虽然Spring的组件代…

超市管理系统 需求分析与设计 UML 方向

一、项目介绍 1.1项目背景 随着经济一体化和电子商务的迅速发展,网络传播信息的速度打破了传统信息传递的模式,互联网的高速发展和计算机应用在各个高校进展迅速,更多信息化产品的突飞猛进,让现代的管理模式也发生了巨大的变化&…

vue数据缓存

data 对象未定义或未正确传递:确保 data 对象在你调用 onMounted 钩子时已经存在且包含 base.columns 属性。 columns 响应式引用未定义:确保 columns 是一个使用 ref 或 reactive 创建的响应式引用。 异步数据问题:如果 data 是通过异步操…

vue 搭建 pinia

文章目录 环境设置存储读取数据【 storeToRefs】借助storeToRefs将store中的数据转为ref对象,方便在模板中使用【getters】当state中的数据,需要经过处理后再使用时,可以使用getters配置【$subscribe】通过 store 的 $subscribe() 方法侦听 s…

用动态规划算法均分纸牌,谈谈理解思路

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

升级自动交易!打通miniQMT接口!股票量化分析工具QTYX-V2.8.7

前言 我们的股票量化系统QTYX在实战中不断迭代升级!!! 我们用Python搭建自己的量化交易系统,之前主要以手动交易或者是easytrader库为主,属于曲线救国的方案。 在大家的强烈推荐下,我们决定使用正规的量化交易平台作为下单的最后环节——QMT&…

【Visual Studio】Visual Studio使用技巧及报错解决合集

目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法,包括Visual Studio报错问题及解决方法、Visua…

mac安装win10到外接固态硬盘

1、制作win10系统 1.1 下载 winToUSB,打开后选择第一个 1.2 选择本地下载镜像, 我用的分区方案是适用于UEFI的GPT模式 1.3 点右下角执行,等待执行完成即可 2、mac系统下载win驱动 2.1 comman空格 搜索启动转换助理,打开后选择…

Ubuntu 22.04.4 LTS (linux) 安装certbot 免费ssl证书申请 letsencrypt

1 安装certbot sudo apt update sudo apt-get install certbot 2 申请letsencrypt证书 sudo certbot certonly --webroot -w 网站目录 -d daloradius.域名.com 3 修改nginx 配置ssl 证书 # 配置服务器证书 ssl_certificate /etc/letsencrypt/live/daloradius.域名.com/f…

浅谈后置处理器之正则表达式提取器

浅谈后置处理器之正则表达式提取器 JMeter是一款功能强大的开源负载测试工具,广泛应用于Web应用、数据库等的性能测试。在进行接口测试或负载测试时,经常需要从服务器响应中提取某些数据作为后续请求的参数。这时,“正则表达式提取器”&…

Web开发:<br>标签的作用

br作用 介绍基本用法常见用途注意事项使用CSS替代 介绍 在Web开发中&#xff0c;<br> 标签是一个用于插入换行符的HTML标签。它是“break”的缩写&#xff0c;常用于需要在文本中强制换行的地方。<br> 标签是一个空标签&#xff0c;这意味着它没有结束标签。 基本…

HTML+CSS+JS用户管理(可储存用户数据)

使用cookies记录账号密码信息&#xff0c;可以注册、登录、注销账号。 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码在效果图后面 源代码 HTML <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <…

无人机图像目标检测

本仓库是人工智能课程的课程作业仓库&#xff0c;主要是完成无人机图像目标检测的任务&#xff0c;我们对visdrone数据集进行了处理&#xff0c;在yolo和ssd两种框架下进行了训练和测试&#xff0c;并编写demo用于实时的无人机图像目标检测。 requirements依赖&#xff1a; ss…