详解SpringCloud微服务技术栈:Nacos配置管理

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习
🌌上期文章:详解SpringCloud微服务技术栈:Nacos服务搭建及服务分级存储模型
📚订阅专栏:微服务技术全家桶
希望文章对你们有所帮助

上一节讲了Nacos做服务搭建的方法,并与Eureka做了比较,Nacos除了可以做服务的搭建,比起Eureka还有更多的功能,即配置管理。
Nacos的集群搭建,感觉太复杂了,就一台电脑要弄很久去模拟,所以不做展示了。

Nacos配置管理

  • 统一配置管理
  • 微服务配置拉取
  • 配置热更新
  • 多环境配置共享

统一配置管理

在实际生产环境中会有很多的服务,服务之间又有互相调用的关系,每次重新配置,都可能使得其他服务也要修改一些配置,同时服务都得重启,在实际生产环境中的影响有时候还是很大的。因此需要将配置的文件进行统一的管理,同时这些配置的更改无须重启,直接热更新。
设置配置管理服务,当配置要做修改的时候,无须自己做改动,而是去配置服务管理中把需要配置的地方做修改。
而Nacos就拥有配置管理服务。
在这里插入图片描述
这里可以新建配置管理,这里的配置放着的是有热更新需求的配置:
在这里插入图片描述

微服务配置拉取

接下来,微服务需要得到这些统一配置。
假设没有Nacos的统一配置,其获取配置的步骤为:

1、启动项目
2、读取本地配置文件application.yml
3、创建Spring容器
4、加载bean

当加入了Nacos中的配置文件以后,服务启动之后,就需要先读Nacos中的配置文件,再将Nacos中的配置文件与本地的配置文件做一个合并。
需要考虑一些问题:从哪里读取Nacos地址,读取什么内容。
在此之前,要先获得Nacos的地址,就需要使用bootstrap.yml,优先级比application高。

步骤:
1、引入Nacos的配置管理客户端依赖:

		<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

2、在userservice中的resource中添加bootstrap.yml文件,这是引导文件,优先级高于application.yml:

spring:application:name: userserviceprofiles:active: dev # 环境cloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后缀名

3、删除application.yml中的重复配置。

这样就可以拉取到配置了,可以在UserController中验证:

    @NacosValue("${pattern.dateformat}")private String dateformat;@GetMapping("now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}

访问localhost:8081/user/now:
在这里插入图片描述
这说明微服务已经成功获取了Nacos中的配置信息。

将配置交给Nacos管理的步骤总结:
1、在Nacos中添加配置文件
2、在微服务中引入Naocs的config依赖
3、在微服务中添加bootstrap.yml,配置Nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去Nacos读取哪个文件。

配置热更新

当我们直接修改Nacos配置后,重新访问网页是不会实现更新的,必须重启服务,这会导致损失,因此需要配置热更新。需要通过下面2种配置实现:
方式一:在@Value注入的变量所在类上添加@RefreshScope
在这里插入图片描述
方式二:使用@ConfigurationProperties注解
SpringBoot中注入属性不只有@Value方式,可以新建一个类,专门用来完成属性的加载:

@Data
@Component //注册成bean,让所有类都可以直接使用
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;
}

当需要用到的时候,直接注解获取即可:

	@Resourceprivate PatternProperties patternProperties;@GetMapping("now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));}

方式二是更方便的,推荐使用。

多环境配置共享

有些环境的配置可能都是一样的,这时候要是配置可以共享,就可以避免多次修改了,更为方便。
实际上,微服务启动时会从Nacos读取多个配置文件:

[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
[spring.application.name].yaml,例如:userservice.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享的配置可以写入这个文件。
打开Nacos控制台进行配置:
在这里插入图片描述
修改PatternProperties:
在这里插入图片描述
在controller中增加GetMapping方法:

	@GetMapping("prop")public PatternProperties properties(){return patternProperties;}

访问网址:
在这里插入图片描述
这里是访问到了dev环境的,我们可以将bootstrap.yml中的dev删掉或者做修改,并重启服务:
在这里插入图片描述
可以发现,共有的属性是可以访问到的。

配置的优先级问题

如果userservice.yaml与userservice-dev.yaml中有相同的配置名,以谁的为准?
本地application.yml与远端配置有相同配置名,以谁的为准?

答案:userservice-dev.yaml>userservice.yaml>application.yml

也就是说,服务名-profile.yaml >服务名称.yaml > 本地配置

集群的搭建才是重点,但是我就一台电脑,就不做模拟了,太麻烦了。

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

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

相关文章

泛微与用友NCC的无缝对接,释放企业运营潜能!

客户介绍 某科技股份有限公司作为一家在金融科技行业有着20余年经验的公司&#xff0c;见证了金融科技行业的电子化、信息化、移动化和数字化的发展进程。该公司致力于为金融机构提供领先的产品和专业化服务&#xff0c;其业务涵盖应用软件开发、系统集成、IT服务和IT咨询服务…

在线录屏-通过Web API接口轻松实现录屏

在线录屏是指在互联网上进行屏幕录制的过程。它允许用户通过网络连接&#xff0c;将自己的屏幕活动记录下来&#xff0c;并可以在需要时进行播放、共享或存档。在线录屏常用于教育、培训、演示、游戏等场景&#xff0c;可以帮助用户展示操作步骤、解决问题、分享经验等。通常&a…

Odrive 学习系列三:在odrive工程中添加SEGGER RTT 日志输出功能

一、背景: 对于嵌入式来讲,有个日志输出真真真真的太重要啦! SEGGER JLink自带的RTT日志输出对于老嵌入式而言更是开发利器。 Odrive本身的工程是不带这个功能的,尽管使用stlink可以查阅寄存器等,但感觉还是差了点意思。因此在本系列第二节的基础上,希望能给Odrive工程添…

【昕宝爸爸小模块】深入浅出之JDK21 中的虚拟线程到底是怎么回事(一)

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

016-Vue-黑马2023:前后端分离开发:在线接口文档,前端工程化、Element、nginx

第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发&#xff1a;传统开发模式 前后端分离开发&#xff1a;当前最为主流的开发模式 页面原型需求案例&#xff1a;分析出接口文档 离线开发文档示例&#xff1a; 2、YAPI 在线接口文档管理平台&#xff1a; 介绍…

05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域

01-函数的介绍 """ 演示&#xff1a;快速体验函数的开发及应用 ​ """ #需求&#xff0c;统计字符串的长度&#xff0c;不使用内置函数len() str1 "itheima" str2 "itcast" str3 "python" ​ #定义一个技术的变…

解决Win11安装打印机修复补丁,连接共享打印机依然错误的方法

问题原因&#xff1a;Win11最新安全共享策略导致&#xff01; 解决方案&#xff1a;按照下面步骤操作绕过Win11最新安全共享策略。 点击Win图标&#xff0c;在开始菜单选择设置。 选择蓝牙和其他设备&#xff0c;选择打印机和扫描仪。 点击添加设备&#xff0c; 点击手动添加。…

HubSpot电子邮件自动回复怎么设置?附注意事项!

HubSpot 提供了电子邮件自动回复的功能&#xff0c;使得企业能够更高效地管理和处理电子邮件通信。以下是关于 HubSpot 电子邮件自动回复的一些重要信息和步骤&#xff1a; 设置电子邮件自动回复的步骤&#xff1a; 登录HubSpot账户&#xff1a; 打开 HubSpot 平台并登录你的账…

基于SSM的戏剧推广网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…

IDEA中如何让包名一层层展开的设置

在开发过程中&#xff0c;发现新下载的一个项目在打开时候&#xff0c;呈现的包是没有一层一层展开的&#xff0c;是平铺在idea中的&#xff0c;截图如下&#xff1a; 设置方法&#xff1a; 打开options的小图标 在treeAppear中的Flatten packages的对号取消掉取消之后的效果…

【RTOS】快速体验FreeRTOS所有常用API(7)任务通知

目录 七、任务通知7.1 基本概念7.2 发出通知7.3 等待通知7.4 实例 七、任务通知 该部分在上份代码基础上修改得来&#xff0c;代码下载链接&#xff1a; https://wwzr.lanzout.com/i4Efu1la39wh 密码:cbvx 该代码尽量做到最简&#xff0c;不添加多余的、不规范的代码。 内容主要…

SpringBoot-Starter 自动锁组件

在日常业务开发的过程中&#xff0c;我们经常会遇到存在高并发的场景&#xff0c;这个时候都会选择使用redis来实现一个锁&#xff0c;来防止并发。 但是很多时候&#xff0c;我们可能业务完成后&#xff0c;就需要把锁释放掉&#xff0c;给下一个线程用&#xff0c;但是如果我…

免费scrum管理工具Leangoo敏捷做缺陷跟踪管理

缺陷管理通常关注如下几个方面&#xff1a; 1. 缺陷的处理速度 2. 缺陷处理的状态 3. 缺陷的分布 4. 缺陷产生的原因 使用Leangoo敏捷看板我们可以对缺陷进行可视化的管理&#xff0c;方便我们对缺陷的处理进展、负责人、当前状态、分布情况等各个方面一目了然。 下面我们…

安卓APP和小程序渗透测试技巧总结

记得开启模拟器的ROOT权限&#xff1a;本文章仅供学习和研究使用&#xff0c;严禁使用该文章内容对互联网其他应用进行非法操作&#xff0c;若将其用于非法目的&#xff0c;所造成的后果由您自行承担。 由于安卓7开始对系统安全性做了些改动&#xff0c;导致应用程序不再信任客…

设计模式——一文即可

对常用设计模式的总结&#xff0c;也是对设计模式专栏的总结 简单工厂模式 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式&#xff0c;通过将对象的创建逻辑封装在一个工厂类中&#xff0c;客…

【深度学习环境搭建】Windows搭建Anaconda3、已经Pytorch的GPU版本

目录 搭建Anaconda3搭建GPU版本的Pytorch你的pip也要换源&#xff0c;推荐阿里源打开conda的PowerShell验证 搭建Anaconda3 无脑下载安装包安装&#xff08;自行百度&#xff09; 注意点&#xff1a; 1、用户目录下的.condarc需要配置&#xff08;自定义环境的地址&#xff08…

QT quick基础:加载资源文件(字体)

一、加载字体 1、准备字体库 Roboto-Regular.ttf 2、在工程下面新建文件夹fonts&#xff0c;并将字体库放到该文件夹下面。 3、在QT Create 工程中添加字体。 添加现有文件选择Roboto-Regular.ttf。 4、执行qmake 5、在.qml文件加载字体 /* 加载字体 */FontLoader {id: f…

Linux批量快速修改文件名的三种方法

在Linux中&#xff0c;批量重命名文件是一项常见且有用的操作。以下是三种常用的批量重命名文件的方法&#xff0c;每种方法都附有示例。这些方法既可以适用于新手&#xff0c;也适用于更有经验的用户。 话不多说&#xff0c;直接上干货&#xff01; rename 命令 rename命令是…

浅谈电动汽车充电站箱变电气安全物联监测系统设计与应用

摘 要:基于物联网技术架构提出了一种适用于电动汽车充电站箱变的电气安全物联监测系统设计方案。该系统由电气安全智能感知设备、通信网关、电气安全物联网监测平台等构成&#xff0c;可支持充电站箱变充电桩出线回路电流、电缆 温度、剩余电流、故障电弧、短路电流等数据采集监…

PagedAttention: from interface to kernal

1 Overview PagedAttention灵感来自于操作系统中虚拟内存和分页的经典思想&#xff0c;它可以允许在非连续空间立存储连续的KV张量。具体来说&#xff0c;PagedAttention把每个序列的KV缓存进行了分块&#xff0c;每个块包含固定长度的token&#xff0c;而在计算attention时可…