【微服务】3、配置管理
微服务配置管理

- 已掌握的微服务组件及配置管理问题引出
- 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。
- 微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日志、接口文档等配置。随着微服务数量增多,重复配置和维护成本高成为问题。
- 配置管理服务解决重复配置问题
- 引入配置管理组件(服务),将微服务中重复或通用的配置交给它管理。
- 微服务启动时读取配置管理服务中的配置,实现配置共享,减少重复编写,方便线上配置修改。
- 业务相关配置的问题
- 业务相关配置众多,如登录超时时间、最大重试次数、订单超时时长、购物车商品数量上限等,不能写死在代码中,需放在配置文件。
- 配置文件修改配置虽无需重新编译打包,但需重启项目,影响用户体验和运维工作。
- 配置变更需重启服务的问题及解决方案
- 微服务和网关每次配置变更都需重启服务,这是核心问题。
- 配置管理服务可管理业务相关配置和网关路由配置,监听配置变更并推送消息,使微服务无需重启即可生效,实现配置热更新。
- 配置管理的核心功能及Nacos的作用
- 配置管理的两大核心功能为配置共享和避免配置更新后重启实现热更新。
- 之前使用的Nacos不仅具备注册中心功能,还能实现配置管理,无需学习新的技术。

-
背景介绍
- 微服务配置问题:微服务中存在如JDBC、日志、swagger等重复度高的配置,不适合在微服务中重复编写。
- 解决方案:将这些配置交给Nacos配置中心统一管理,实现微服务间配置共享,本节课学习利用Nacos实现配置共享,主要有添加共享配置到Nacos和微服务拉取配置两步。
-
添加共享配置到Nacos
- 确定共享配置内容:以购物车服务配置文件为例,其中服务端口和名称不重复,但JBDC连接参数(除数据库名)、mp配置、日志配置、swagger配置等多服务重复,将这些配置分批抽取,先处理JBDC和mp相关配置。
- 在Nacos中添加共享配置
- 在Nacos控制台配置管理菜单的配置列表点击加号添加新配置。
- 配置信息包括:
- Data ID:配置文件名称,如shareGDBCDEO用于共享GBDC配置,微服务获取共享配置需指定此名称。
- Group:数据分组,默认default group。
- 描述:对文件简单介绍,如GBDC共享配置文件。
- 文件格式:本次为yaml格式。
- 配置内容:粘贴相关配置并保留GBDC和mp相关内容,同时将可能变化的配置设为变量,如数据库名、服务端口、IP地址、用户名、密码等,可定义默认值。
- 添加其他共享配置:类似地,对日志配置(如share log em)和swagger配置(如share swagger em)进行操作,其中swagger配置中标题、描述可设变量和默认值,扫描包不写死。
-
微服务拉取配置
-
Spring Boot项目启动流程与问题:普通Spring Boot项目启动先读取application.yml完成spring application context初始化。但Spring Cloud项目引入配置管理后,启动时先尝试拉取Nacos配置完成spring cloud上下文环境初始化,再进行Spring Boot配置文件加载和上下文初始化,这导致项目启动时不知Nacos地址无法拉取配置的问题。
-

-
解决方案:创建bootstrap.yml文件
- 作用:引导配置文件,项目启动先读取它获取Nacos地址,解决拉取配置问题。
- 内容:主要由三部分组成。
- 服务名、application启动运行环境(可分dev、local等环境,需指定profile active)、Nacos地址。
- config file extension:指定共享配置文件后缀名,本次为yml。
- 共享配置文件名称:指定要拉取的共享配置文件名,如shareGDBCDEO等。
- 操作步骤:
-
引入依赖:
-

-

-
创建文件:复制粘贴并重命名为bootstrap.yml,修改内容,保留服务名、环境、Nacos地址,添加共享配置文件信息,同时在application.yml中去除已在bootstrap.yml或从Nacos拉取的配置(如服务名、环境、数据库NX地址、日志、NPD等),保留需自定义的变量(如HMDB.database、swagger相关的title、扫描包等)。
-
-
-
课程总结
- 核心步骤:
- 将共享配置添加到Nacos管理。
- 在微服务内部拉取配置,包括引依赖(spring cloud starter alibaba nacos config和spring cloud starter bootstrap)和定义bootstrap.yml文件(指定服务名称、激活环境变量、Nacos地址、要拉取的共享配置名字)。
- 最终效果:实现微服务配置共享,简化微服务配置文件。
- 核心步骤:
配置热更新
-
配置热更新概念与作用
- 概念:修改配置文件时,微服务无需重启使配置生效。
- 作用:部分配置与业务有关且可能变更,配置热更新可提升用户体验,避免因重启服务导致用户无法访问。
-
配置热更新文件名称格式


- 格式组成:包含微服务名(spring application name)、profile(spring active profile,可选)、文件后缀名(file extension)。
-
配置热更新的读取方式

- 方式一:使用configuration properties读取配置,配置文件中需有对应属性,配置变更时可热更新。
- 方式二:采用注解方式读取属性,需在类上加refresh scope注解标记。推荐使用方式一,原因是value注解方式获取属性已不常用,且方式二需额外学习新注解。
-
购物车服务配置热更新案例实操

- 需求:将购物车商品上限设置为配置文件属性,实现配置热更新。
- 操作步骤
-
在购物车服务中定义属性类,如CartProperties,添加@ConfigurationProperties注解并设置前缀,定义最大商品数量属性maxItems并注册成bean。
-

-
在业务代码中注入该属性,修改添加购物车逻辑,判断购物车数量是否超过maxItems属性值,超过则抛出异常。
-
在Nacos中添加配置文件,文件名格式为微服务名+profile(可选)+后缀名,指定属性值,如HM.cut.max-items=1,不指定profile则所有环境生效。
-

-
重启购物车服务,测试添加购物车功能,根据配置上限限制添加数量。修改Nacos中配置值为10并发布,再次测试添加购物车,验证热更新效果。
-
-
配置热更新实现步骤总结
- 在Nacos中定义与微服务名相关的配置文件,文件名格式为微服务名+profile(可选)+后缀名。
- 在微服务中使用configuration properties方式加载属性,配置变更时无需重启服务即可生效。
相关文章:
【微服务】3、配置管理
微服务配置管理 已掌握的微服务组件及配置管理问题引出 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日…...
数据分析思维(七):分析方法——群组分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
概述(讲讲python基本语法和第三方库)
我是北子,这是我自己写的python教程,主要是记录自己的学习成果方便自己日后复习, 我先学了C/C,所以这套教程中可能会将很多概念和C/C去对比,所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…...
力扣-20-有效的括号-栈
思路: 左括号每次匹配都是先匹配最后进来的,和栈的特点很相似,我们就可以利用栈来完成...
数据在内存中的存储【C语言版】
目录 1.举例: 2.深入刨析大端小端的组成: 3.判断当前编译环境是大端还是小端的方法 4.以函数的形式来判断当前的编译环境是大端还是小端【就是把判断大端小端的方法放进函数里面来实现,得到返回值,可以减少main()函数的内存】…...
【SQL】进阶知识 — 各大数据库合并几条数据到一行的方式
大家好,欢迎来到本期的 SQL 知识分享!今天我们要聊一个非常实用的技能:如何将多个行数据合并成一行!如果你曾经需要把多个查询结果合并成一个单元,或者把多行数据汇总到一个字段中,这篇文章将会教你如何用 …...
Gitee上传项目代码教程(详细)
工具必备:Git Bash 上传步骤 1.在Gitee创建项目仓库 2.进入本地项目目录 右键打开Git Bash here 3.配置用户名和邮箱 如果之前给git配置过用户名和邮箱可跳过 查看Git是否配置成功:git config --list git config --global user.name "xxx"…...
python ijson 用法教程
ijson PyPI Python ijson处理大型JSON文件 - 秀尊云 Python解析JSON大文件 | Leetaos Blog https://stackoverflow.com/questions/2400643/is-there-a-memory-efficient-and-fast-way-to-load-big-json-files/58148422#58148422 Python中读写(解析)J…...
什么是网络安全攻防演练,即红蓝对抗?
定义与目的 定义:网络安全攻防演练是一种模拟真实网络攻击和防御场景的活动,通过组织专业的攻击队伍(红队)和防御队伍(蓝队)进行对抗,来检验和提升组织的网络安全防御能力、应急响应能力和安全运…...
数据挖掘——决策树分类
数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构,可以很好的对数据进行分类; 决策树的根节点到叶节点的每一条路径构建一条规则;具有互斥且完备的特点,即每一个样本均被且…...
Pytorch单、多GPU和CPU训练模型保存和加载
Pytorch多GPU训练模型保存和加载 在多GPU训练中,模型通常被包装在torch.nn.DataParallel或torch.nn.parallel.DistributedDataParallel中,这会在模型的参数名前加上module前缀。因此,在保存模型时,需要使用model.module.state_di…...
Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具)
Karate是一个将API测试自动化、模拟、性能测试甚至UI自动化结合到一个统一框架中的开源工具。 Karate使用Gherkin 的BDD语法,是语言中性的,即使是非程序员也很容易。断言和HTML报告是内置的,支持并行运行测试以提高速度Karate 是用Java语言编写, 可以在Java 项目项目中运行…...
Pytest 高级用法:间接参数化
文章目录 1. 引言2. 基础概念2.1 Fixture2.2 参数化 3. 代码实例3.1 基础设置3.2 测试用例示例示例 1:基础的间接参数化示例 2:通过 request 获取参数值示例 3:多参数组合测试示例 4:部分间接参数化 4. 最佳实践5. 总结参考资料 1…...
第07章 存储管理(一)
一、磁盘简介 1.1 名称称呼 磁盘/硬盘/disk是同一个东西,不同于内存的是容量比较大。 1.2 类型 机械:机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器࿰…...
Go语言的 的设计模式(Design Patterns)核心知识
Go语言的设计模式(Design Patterns)核心知识 Go语言(Golang)是一种静态类型、编译型的编程语言,自2009年由Google正式推出以来,因其高效的性能、卓越的并发能力以及简洁的语法受到广泛欢迎。在软件开发中&…...
js函数预览图片:支持鼠标和手势拖拽缩放
对之前的方式改进:原生js实现图片预览控件,支持丝滑拖拽,滚轮放缩,放缩聚焦_js图片预览-CSDN博客 /*** 图片预览函数,调用后自动预览图片* param {图片地址} imgurl*/ function openImagePreview(imgurl) {if (!imgurl…...
用QT实现 端口扫描工具1
安装在线QT,尽量是完整地自己进行安装,不然会少包 参考【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境-CSDN博客 临时存储空间不够。 Windows系统通常会使用C盘来存储临时文件。 修改临时文件存储位置 打开系统属性: 右键点击“此电…...
设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口,从而使原本因接口不兼容而无法一起工作的类能够协同工作。这种设计模式在软件开发中非常有用,尤其是在需要集成…...
vue 项目集成 electron 和 electron 打包及环境配置
vue electron 开发桌面端应用 安装 electron npm i electron -D记得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面运行可能会报错 根目录创建electron文件夹,在electron文件夹创建main.js(或者backgrou…...
vscode如何离线安装插件
在没有网络的时候,如果要安装插件,就会麻烦一些,需要通过离线安装的方式进行。下面记录如何在vscode离线安装插件。 一、下载离线插件 在一台能联网的电脑中,下载好离线插件,拷贝到无法联网的电脑上。等待安装。 vscode插件商店地址:https://marketplace.visualstudio.co…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
