黑马程序员SpringCloud微服务开发与实战-微服务-配置管理

news/2025/12/9 23:43:48/文章来源:https://www.cnblogs.com/xinmomoyan/p/19328766

黑马程序员SpringCloud微服务开发与实战-微服务-配置管理

Posted on 2025-12-09 23:41  心默默言  阅读(0)  评论(0)    收藏  举报

到目前为止我们已经解决了微服务相关的几个问题:

  • 微服务远程调用
  • 微服务注册、发现
  • 微服务请求路由、负载均衡
  • 微服务登录用户信息传递

不过,现在依然还有几个问题需要解决:

  • 网关路由在配置文件中写死了,如果变更必须重启微服务
  • 某些业务配置在配置文件中写死了,每次修改都要重启服务
  • 每个微服务都有很多重复的配置,维护成本高

这些问题都可以通过统一的配置管理器服务解决。而Nacos不仅仅具备注册中心功能,也具备配置管理的功能:
image
微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。
网关的路由同样是配置,因此同样可以基于这个功能实现动态路由功能,无需重启网关即可修改路由配置。

1. 配置共享

我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。分为两步:

  • 在Nacos中添加共享配置
  • 微服务拉取配置

1.1 添加共享配置

以cart-service为例,我们看看有哪些配置是重复的,可以抽取的:
首先是jdbc相关配置:
image
然后是日志配置:
image
然后是swagger以及OpenFeign的配置:
image
我们在nacos控制台分别添加这些配置。
首先是jdbc相关配置,在配置管理->配置列表中点击+新建一个配置:
image
在弹出的表单中填写信息:
image
其中详细的配置如下:

spring:datasource:url: jdbc:mysql://${hm.db.host:192.168.150.101}:${hm.db.port:3306}/${hm.db.database}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: ${hm.db.un:root}password: ${hm.db.pw:123}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto

注意这里的jdbc的相关参数并没有写死,例如:

  • 数据库ip:通过${hm.db.host:192.168.150.101}配置了默认值为192.168.150.101,同时允许通过${hm.db.host}来覆盖默认值
  • 数据库端口:通过${hm.db.port:3306}配置了默认值为3306,同时允许通过${hm.db.port}来覆盖默认值
  • 数据库database:可以通过${hm.db.database}来设定,无默认值

然后是统一的日志配置,命名为shared-log.yaml,配置内容如下:

logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"

然后是统一的swagger配置,命名为shared-swagger.yaml,配置内容如下:

knife4j:enable: trueopenapi:title: ${hm.swagger.title:黑马商城接口文档}description: ${hm.swagger.description:黑马商城接口文档}email: ${hm.swagger.email:zhanghuyi@itcast.cn}concat: ${hm.swagger.concat:虎哥}url: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- ${hm.swagger.package}

注意,这里的swagger相关配置我们没有写死,例如:

  • title:接口文档标题,我们用了${hm.swagger.title}来代替,将来可以有用户手动指定
  • email:联系人邮箱,我们用了${hm.swagger.email:zhanghuyi@itcast.cn},默认值是zhanghuyi@itcast.cn,同时允许用户利用${hm.swagger.email}来覆盖。

1.2 拉取共享配置

接下来,我们要在微服务拉取共享配置。将拉取到的共享配置与本地的application.yaml配置合并,完成项目上下文的初始化。
不过,需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext)初始化时处理的,发生在项目的引导阶段。然后才会初始化SpringBoot上下文,去读取application.yaml。
也就是说引导阶段,application.yaml文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?

SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或者bootstrap.properties)的文件,如果我们将nacos地址配置到bootstrap.yaml中,那么在项目引导阶段就可以读取nacos中的配置了。
image
因此,微服务整合Nacos配置管理的步骤如下:
1)引入依赖:
在cart-service模块引入依赖:

  <!--nacos配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--读取bootstrap文件--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

2)新建bootstrap.yaml
在cart-service中的resources目录新建一个bootstrap.yaml文件:
image
内容如下:

spring:application:name: cart-service # 服务名称profiles:active: devcloud:nacos:server-addr: 192.168.150.101 # nacos地址config:file-extension: yaml # 文件后缀名shared-configs: # 共享配置- dataId: shared-jdbc.yaml # 共享mybatis配置- dataId: shared-log.yaml # 共享日志配置- dataId: shared-swagger.yaml # 共享日志配置

3)修改application.yaml
由于一些配置挪到了bootstrap.yaml,因此application.yaml需要修改为:

server:port: 8082
feign:okhttp:enabled: true # 开启OKHttp连接池支持
hm:swagger:title: 购物车服务接口文档package: com.hmall.cart.controllerdb:database: hm-cart

重启服务,发现所有配置都生效了。

2. 配置热更新

有很多的业务相关参数,将来可能会根据实际情况临时调整。例如购物车业务,购物车数量有一个上限,默认是10,对应代码如下:
image
现在这里购物车是写死的固定值,我们应该将其配置在配置文件中,方便后期修改。
但现在的问题是,即便写在配置文件中,修改了配置还是需要重新打包、重启服务才能生效。能不能不用重启,直接生效呢?
这就要用到Nacos的配置热更新能力了,分为两步:

  • 在Nacos中添加配置
  • 在微服务读取配置

2.1 添加配置到Nacos

首先,我们在nacos中添加一个配置文件,将购物车的上限数量添加到配置中:
image
注意文件的dataId格式:

[服务名]-[spring.active.profile].[后缀名]

文件名称由三部分组成:

  • 服务名:我们是购物车服务,所以是cart-service
  • spring.active.profile:就是spring boot中的spring.active.profile,可以省略,则所有profile共享该配置
  • 后缀名:例如yaml

这里我们直接使用cart-service.yaml这个名称,则不管是dev还是local环境都可以共享该配置。
配置内容如下:

hm:cart:maxAmount: 1 # 购物车商品数量上限

提交配置,在控制台能看到新添加的配置:
image

2.2 配置热更新

接着,我们在微服务中读取配置,实现配置热更新。
在cart-service中新建一个属性读取类:
image
代码如下:

package com.hmall.cart.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {private Integer maxAmount;
}

接着,在业务中使用该属性加载类:
image
测试,向购物车中添加多个商品:
image
我们在nacos控制台,将购物车上限配置为5:
image
无需重启,再次测试购物车功能:
image
加入成功!
无需重启服务,配置热更新就生效了!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git-ssh - yebinghuai-qq

git-ssh ----------------------------------------------------------------------------打开 Git Bash(不是 CMD) 步骤1:检查 SSH 密钥 dir %USERPROFILE%\.ssh dir C:/Users/Administrator/.ssh生成 SSH 密钥 ss…

Linux中级のNginx~2

Nginx目录索引 目录索引模块简述 ngx_http_autoindex_module 模块处理以斜杠字符(’/’)结尾的请求,并生成目录列表。 当 ngx_http_index_module 模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_modu…

2025 最新水性地坪漆厂家 TOP5推荐!水性地坪漆年度品牌榜,环保性能 + 技术创新优质供应商,专业赋能地面涂装新体验 - 全局中转站

随着水性地坪漆在建筑、工业、市政等领域的广泛应用,市场对高品质、环保型产品的需求持续攀升。本榜单基于环保性能、技术创新、应用场景适配性、服务体系四大维度,结合行业权威数据及用户反馈,全面解析2025年五大水…

数据采集与融合技术实践4

数据采集与融合技术实践4 任务一 任务要求 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:http://quote.eastmoney.com/center…

12月9日日记

1.今天学习英语 2.明天马哲 3.Flter 配置的优先级?是否遗漏了 @WebFilter 注解(注解方式配置时)?

2025.12.9总结

今天把大数据的作业写完。基础层 (实验1-2): 环境与存储 技能获取: 熟练使用 Linux Shell 和 Hadoop HDFS Shell 进行系统与分布式文件管理。 核心认知: 理解分布式文件系统(HDFS)的核心思想——数据分块、多副本存储…

2025 最新路面胶粘剂厂家 TOP5 评测!路面胶粘剂优质国产品牌年度榜单,绿色环保 + 性能实证权威榜单发布,技术赋能重构路面工程生态 - 全局中转站

随着基础设施建设与城市更新的加速,路面胶粘剂作为保障道路安全、美观与耐久性的核心材料,市场需求持续攀升。本榜单基于环保性能、技术创新力、工程适配性、服务体系四大维度,结合行业权威数据与实际工程案例反馈,…

2025年国内十大检定器生产厂家实力排行榜,贯入式砂浆强度检测仪/回弹仪检定器/裂缝测深仪/裂缝测宽仪/数显碳化深度尺检定器供应厂家找哪家 - 品牌推荐师

在建筑工程质量检测、工业分析及科研实验等领域,检定器作为确保测量仪器准确性的关键设备,其重要性日益凸显。随着国内制造业向高端化、智能化迈进,一批拥有核心技术、注重品质与创新的检定器生产企业脱颖而出,构成…

2025 最新桥梁防腐涂料厂家 TOP5 评测!环保高性能 + 技术创新权威榜单发布,守护基础设施安全与耐久 - 全局中转站

随着基础设施建设的持续推进,桥梁作为交通命脉,其防腐保护需求日益凸显。桥梁防腐涂料作为延长桥梁使用寿命、保障结构安全的关键材料,市场对其性能、环保和耐久性要求不断提升。本榜单基于技术创新力、产品性能、行…

2025年权威推荐!水处理设备企业综合实力TOP4 - 极欧测评

在水处理设备采购中,企业用户往往面临“资质难辨、适配性差、售后无保障”等痛点,尤其是医疗、电子、食品等对水质要求严苛的行业,设备选择直接影响生产安全与效率。笔者结合近3年行业实测数据、120+企业案例反馈及…

Seata原理与简单示例 - 指南

Seata原理与简单示例 - 指南2025-12-09 23:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

12/9

今日无事,下午上了一节英语,就没课了,快期末了

2025年最新盘点:本地最值得信赖的检定器供应商,高强回弹仪检定器/钢砧/云回弹仪/高强回弹仪/涂层测厚仪/楼板测厚仪检定器生产厂家电话 - 品牌推荐师

在建筑工程质量检测与科研分析领域,检定器的精度与可靠性直接关系到数据的权威性与工程的安全性。随着市场对检测设备智能化、数字化需求的不断提升,一批具备深厚技术积淀与稳定产品力的本土企业正脱颖而出。本文基于…

Alpha 阶段第二周 - OUC

12.04-12.10_第二周周报 基本情况 团队 ID:09 组长博客: 小组地址: https://github.com/LaurentZC/MarineFloatingDebrisDetectionSystem 小组成员:LaurentZC、morning-glory-qu、Locusclaer 冲刺概况汇报 小组任务…

成长?都是被逼出来的罢了

小时总把变得有能力,能够独立解决问题当成是梦寐以求的事情,殊不知货的能力并不是一件容易的事情。玄学的观点是万事万物都遵循着能量守恒定律,一方面的能力提升,必定使得另一方面的能力退化,鱼和熊掌不可兼得。 …

东方智慧的现代生成:论岐金兰AI元人文构想的思想本源、理论建构与文明意义

东方智慧的现代生成:论岐金兰AI元人文构想的思想本源、理论建构与文明意义 摘要:本文系统阐述岐金兰AI元人文构想,指出其并非对西方AI伦理理论的区域性应用或注脚,而是一套根植于中国传统文化深层智慧、并直面“人…

US$1209.35 Original Alientech KESS V3 KESS3 Master 12MonthsSubscription

The Challenge of Modern Vehicle Diagnostics and Tuning in Europe and America In today’s automotive landscape, European and American vehicles are increasingly complex, with advanced ECUs, adaptive syst…

JVM内存与GC机制全景深度剖析:从对象诞生到垃圾回收的完整生命周期

本文将从对象完整生命周期的视角,系统性地阐述JVM内存管理和垃圾回收机制。你将看到对象如何出生、如何存活、如何晋升,以及最终如何被回收的完整过程。 核心叙事线:一个对象的"人生旅程"出生:在堆内存中…

2025 最新桥梁防腐涂料厂家 TOP5推荐!绿色防腐 + 工程实证权威榜单发布,技术赋能守护基建安全 - 全局中转站

随着基础设施建设的持续推进,桥梁作为交通网络的关键节点,其防腐保护需求日益凸显。桥梁防腐涂料不仅需要具备卓越的耐候性、抗腐蚀能力,还需满足环保、安全等多重标准。本榜单基于产品性能、工程案例、环保认证、服…

数据采集实践第四次作业—102302131陈宇新

gitee:https://gitee.com/chenyuxin0328/data-collection/tree/master/作业4 作业1 熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内容。 使用 Selenium 框架+ MySQL 数据库存储技术路线爬…