【微服务】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)
- 总结
- 强烈推荐
- 专栏集锦
- 写在最后
强烈推荐
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

引言
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.name和spring.profiles.active帮助客户端获取适当的配置文件。
配置示例
配置服务器(application.yml)
server:port: 8888spring:cloud:config:server:git:uri: https://github.com/your-repo/config-reposearchPaths: application, profile-specificclone-on-start: true
配置客户端(bootstrap.yml)
spring:cloud:config:uri: http://localhost:8888application:name: my-appprofiles:active: development
工作原理
- 启动:
- 配置服务器克隆指定的 Git 仓库并提供配置文件。
- 配置客户端在启动时联系配置服务器以检索其配置属性。
- 配置检索:
- 配置客户端使用唯一的应用程序名称和配置文件(环境)进行标识。
- 配置服务器响应适用于该应用程序和配置文件的配置文件。
- 动态刷新:
- 使用 Spring Cloud Bus,客户端可以在不重启的情况下刷新其配置。通常通过向总线发送刷新事件来实现,这些事件会传播到所有客户端。
示例场景
场景 1:多个环境配置管理
在一个企业中,开发、测试、和生产环境需要不同的配置。通过 Spring Cloud Config,可以将这些配置存储在 Git 仓库中,并根据当前运行的环境动态加载相应的配置文件。
示例
假设有一个名为 my-app 的应用程序需要在开发、测试和生产环境中运行,每个环境都有不同的数据库连接配置。
Git 仓库中的配置文件结构:
config-repo/my-app/application.ymlapplication-dev.ymlapplication-test.ymlapplication-prod.yml
application.yml (通用配置):
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver
application-dev.yml (开发环境配置):
spring:datasource:url: jdbc:mysql://localhost:3306/devdbusername: devuserpassword: devpass
application-test.yml (测试环境配置):
spring:datasource:url: jdbc:mysql://localhost:3306/testdbusername: testuserpassword: testpass
application-prod.yml (生产环境配置):
spring:datasource:url: jdbc:mysql://prod-db-server:3306/proddbusername: produserpassword: prodpass
配置客户端(bootstrap.yml):
spring:application:name: my-appprofiles: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/proddbusername: produserpassword: prodpass
更新后的 application-prod.yml:
yaml复制代码spring:datasource:url: jdbc:mysql://new-prod-db-server:3306/proddbusername: produserpassword: newprodpass
触发配置刷新
-
更新 Git 仓库中的配置文件。
-
发送 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.username和spring.cloud.config.server.git.password:-
说明: 用于访问受保护的 Git 仓库的凭证。
-
示例:
spring:cloud:config:server:git:username: your-usernamepassword: 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.username和spring.cloud.config.password:-
说明: 用于访问受保护的 Config Server 的凭证。
-
示例
:
spring:cloud:config:username: your-usernamepassword: 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: 8888spring:cloud:config:server:git:uri: https://github.com/your-repo/config-reposearchPaths: application,profile-specificclone-on-start: truedefault-label: mainusername: your-usernamepassword: your-password
配置客户端(bootstrap.yml)
spring:application:name: my-appprofiles:active: developmentcloud:config:uri: http://localhost:8888label: mainusername: your-usernamepassword: your-passwordretry:enabled: truefail-fast: true
总结
Spring Cloud Config 在分布式系统的配置管理中发挥着至关重要的作用。
通过集中化配置管理、环境特定配置、版本控制、动态更新和安全管理等功能,Spring Cloud Config 提高了配置管理的效率和安全性,简化了微服务架构下的配置管理流程。
理解和正确配置这些参数,可以有效地管理和维护系统的配置
强烈推荐
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

专栏集锦
大佬们可以收藏以备不时之需:
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等系列文章,一系列干货随时送达!
如果有项目或者毕设合作,请联系下方微信,备注项目合作
相关文章:
【微服务】Spring Cloud Config解决的问题和案例
文章目录 强烈推荐引言解决问题1. 配置管理的集中化2. 配置的版本控制3. 环境特定配置4. 配置的动态刷新5. 安全管理敏感数据6. 配置的一致性 组件1. **配置服务器(Config Server)**2. **配置客户端(Config Client)** 配置示例配置…...
华为OD机试E卷 --最小的调整次数--24年OD统一考试(Java JS Python C C++)
文章目录 题目描述输入描述输出描述用例题目解析JS算法源码Java算法源码python算法源码c算法源码c++算法源码题目描述 有一个特异性的双端队列一,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。 小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添…...
Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(2):配置主数据库
Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(2):配置主数据库 目录 Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(2):配置主数据库一、配置…...
慧集通iPaaS集成平台低代码训练-实践篇
练习使用帐号信息: 1.致远A8平台(请自行准备测试环境) 慧集通连接器配置相关信息 访问地址: rest账号:rest rest密码: OA账号: 2.云星空(请自行准备测试环境) 连接…...
TDengine 如何进行高效数据建模
1.背景 数据建模对于数据库建立后整体高效运行非常关键,不同建模方式,可能会产生相差几倍的性能差别 2. 建库 建模在建库阶段应考虑几下几点: 建多少库 根据业务情况确定建库个数,TDengine 不支持跨库查询,如果业…...
HarmonyOS NEXT应用开发实战:一分钟写一个网络接口,JsonFormat插件推荐
在开发鸿蒙操作系统应用时,网络接口的实现往往是一个繁琐且重复的过程。为了提高开发效率,坚果派(nutpi.net)特别推出了一个非常实用的插件——JsonFormat。这款插件的主要功能是将JSON格式的数据直接转换为arkts的结构定义,让我们在编写接口…...
基于动力学的MPC控制器设计盲点解析
文章目录 Apollo MPC控制器的设计架构误差模型和离散化预测模型推导目标函数和约束设计优化求解优化OSQP求解器参考文献 Apollo MPC控制器的设计架构 误差模型和离散化 状态变量和控制变量 1、Apollo MPC控制器中状态变量主要有如下6个 matrix_state_ Matrix::Zero(basic_stat…...
Java重要面试名词整理(十六):SpringBoot
由于SpringBoot和Spring、SpringMVC重合度较高,更多详细内容请参考https://blog.csdn.net/weixin_73195042/article/details/144632385 本文着重于SpringBoot的启动流程 文章目录 概念启动流程底层分析构造SpringApplication对象run(String... args)方法SpringBoo…...
在K8S中,如何部署kubesphere?
在Kubernetes集群中,对于一些基础能力较弱的群体来说K8S控制面板操作存在一定的难度,此时kubesphere可以有效的解决这类难题。以下是部署kubesphere的操作步骤: 操作部署: 1. 部署nfs共享存储目录 yum -y install nfs-server e…...
算法-查找缺失的数字
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums [3,0,1] 输出:2 解释:n 3,因为有 3 个数字,所以所有的数字都在范围 [0,3…...
antd-vue - - - - - a-date-picker限制选择范围
antd-vue - - - - - a-date-picker限制选择范围 1. 效果展示2. 代码展示 1. 效果展示 如图:限制选择范围为 今年 & 去年 的 月份. 2. 代码展示 <template><a-date-picker:disabledDate"disabledDate"picker"month"/> &l…...
计算机网络练习题
学习这么多啦,那就简单写几个选择题巩固一下吧! 1. 在IPv4分组各字段中,以下最适合携带隐藏信息的是(D) A、源IP地址 B、版本 C、TTL D、标识 2. OSI 参考模型中,数据链路层的主要功能是(…...
redis的集群模式与ELK基础
一、redis的集群模式 1.主从复制 (1)概述 主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器ÿ…...
STM32-笔记18-呼吸灯
1、实验目的 使用定时器 4 通道 3 生成 PWM 波控制 LED1 ,实现呼吸灯效果。 频率:2kHz,PSC71,ARR499 利用定时器溢出公式 周期等于频率的倒数。故Tout 1/2KHZ;Ft 72MHZ PSC71(喜欢设置成Ft的倍数&…...
Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法,可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中,后台数据返回格式和指定合并是动态且没有规律的,Element 的示例过于简单&…...
【JavaWeb后端学习笔记】MySQL的数据控制语言(Data Control Language,DCL)
MySQL DCL 1、管理用户2、控制权限 DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库访问权限。 1、管理用户 管理用户的操作都需要在MySQL自带的 mysql 数据库中进行。 -- 查询用户 -- 需要先切换到MyS…...
libvirt学习
文章目录 libvirt 简介节点、Hypervisor和域libvirt 安装和配置libvirt的XML配置文件libvirt APIMain libvirt APIsError handlingSpecial specific APIs 建立到Hypervisor的连接libvirt API使用编译libvirt工具virshvirt-clonevirt-dfvirt-imagevirt-installvirt-topvirt-what…...
STM32-笔记19-串口打印功能
复制项目文件夹03-流水灯,重命名为19-串口打印功能 打开项目 在主函数中,添加头文件、和串口初始化函数(设置波特率)和输出函数,如图所示: 软件部分就设置好了 下面是硬件部分 接线:使用USB…...
概率论与数理统计
概率论占比更多,三分之二左右 数理统计会少一些 事件之间的概率 ab互斥,不是ab独立 古典概型吃高中基础,考的不会很多 条件概率公式,要记 公式不要全记,很多有名称的公式是通过基础公式转换而来的 目的在于解决一…...
统信系统设置代理的问题
统信系统设置代理的问题 问题表现方式一方式二 问题表现 统信系统下有系统代理和应用代理两个代理。设置系统代理时,git不能经过代理拉取代码。但是设置应用代理时,可以用git通过代理拉代码。 这是系统代理,在这里设置 ip 端口,…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
