【微服务】Nacos配置管理
🚩本文已收录至专栏:微服务探索之旅
👍希望您能有所收获
Nacos除了可以做配置管理,同样可以当作注册中心来使用。了解注册中心用法点击跳转👉【微服务】Nacos注册中心

一.引入
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
- 由此我们可以引入Nacos用于统一的配置管理:
- 一方面可以用于将配置集中管理。
- 另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

二.统一配置管理
(1) 在nacos中添加配置文件
如何在nacos中管理配置呢?
1.点击右侧配置列表

- 在弹出的表单中,填写配置信息:

- 注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
(2) 在微服务拉取配置
(2.1) 前言
-
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
-
但如果尚未读取application.yml,又如何得知nacos地址呢?
-
因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

(2.2) 引入依赖
在user-service服务中,引入nacos-config的客户端依赖:
<!--nacos配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
注意:如果未在工程中统一管理依赖版本,此处需要指定具体版本
(2.3) 新建bootstrap.yaml
在user-service中添加一个bootstrap.yaml文件,内容如下:
spring:application:name: userservice # 服务名称profiles:active: dev # 开发环境,这里是dev cloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后缀名
这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。
本例中,就是去读取userservice-dev.yaml:

(2.4) 测试
在user-service中的UserController中添加业务逻辑,尝试读取nacos中配置的pattern.dateformat:

完整代码:
package cn.itcast.user.web;import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Value("${pattern.dateformat}")private String dateformat;@GetMapping("now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}// ...略
}
在页面访问,可以看到效果:

说明已经成功读取到了我们在nacos中配置的日期格式。
三.配置热更新
(1) 引入
我们的目的之一是当我们修改nacos中的配置后,无需重启微服务即可让配置即可生效,也就是配置热更新。
要实现配置热更新,可以使用两种方式:
(2) 方式一
在@Value注入的变量所在类上添加注解@RefreshScope:

(3) 方式二
使用@ConfigurationProperties注解代替@Value注解。
- 在user-service微服务中,新建一个类,读取nacos中配置的patterrn.dateformat属性:
package cn.itcast.user.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;
}
- 在UserController中使用这个读取配置类代替@Value直接注入:

(4) 测试
修改nacos中配置后直接刷新网页后可以看到服务已经成功读取到修改后的配置~

四.配置共享
(1) 前言
在微服务启动时,会去nacos按顺序读取多个配置文件,例如:
-
[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml -
[spring.application.name].yaml,例如:userservice.yaml
而[spring.application.name].yaml不包含环境,每种环境都会去读取,因此可以被多个环境共享。
(2) 使用
(2.1) 添加一个环境共享配置
我们在nacos中添加一个userservice.yaml文件:

(2.2) 读取共享配置
- 在user-service服务中,修改PatternProperties类,读取新添加的属性:

-
在user-service服务中,修改UserController,添加一个方法:

-
运行两个UserApplication,修改UserApplication2这个启动项,改变其profile值:


UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。
- 启动UserApplication和UserApplication2
访问http://localhost:8081/user/prop,结果:

访问http://localhost:8082/user/prop,结果:

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。
(3) 配置共享的优先级
当nacos、服务本地同时出现相同配置属性时,优先级有高低之分:

相关文章:
【微服务】Nacos配置管理
🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 Nacos除了可以做配置管理,同样可以当作注册中心来使用。 了解注册中心用法点击跳转👉【微服务】Nacos注册中心 一.引入 当微服务部署的实例越来越多࿰…...
【C++】类与对象理解和学习(上)
专栏放在【C知识总结】,会持续更新,期待支持🌹类是什么?类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它(实例化后才…...
Pyqt5小案例,界面与逻辑分离的小计算器程序
直接看下最终效果: 使用技术总结 使用Designer设计界面 使用pyuic5命令导出到python文件 新建逻辑处理文件,继承pyuic5导出的文件的类,在里面编写信号与槽的处理逻辑 使用Designer设计界面 要使用Designer,安装一个Python库即…...
leaflet加载KML文件,显示图形(方法2)
第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…...
Mysql 部署 MGR 集群
0. 参考文章 官方文档: MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客: MGR 单主模式部署教程(基于 MySQL 8.0.28) - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…...
迁移至其他美国主机商时需要考虑的因素
网站的可访问性是关系业务的关键因素之一。一个稳定、快速且优化良好的主机上的网站更有可能享受不间断的流量,并在谷歌的SERP中获得更好的排名。因此,在构建企业网站时,选择合适的主机商相当重要。不过就以美国主机为例,由于每个…...
【数据结构】第二章 线性表
文章目录第二章 知识体系2.1 线性表的定义和基本操作2.1.1 线性表的定义2.1.2 线性表的基本操作2.2 线性表的顺序表示2.2.1 顺序表的定义2.2.2 顺序表的基本操作的实现2.3 线性表的链式表示2.3.1 单链表的定义2.3.2 单链表的基本操作实现2.3.3 双链表2.3.4 循环链表2.3.5 静态链…...
RESTful API 为何成为顶流 API 架构风格?
作者孙毅,API7.ai 技术工程师,Apache APISIX Committer 万物互联的世界充满着各式各样的 API ,如何统筹规范 API 至关重要。RESTful API 是目前世界上最流行的 API 架构风格之一,它可以帮助你实现客户端与服务端关注点分离&#x…...
Python基础知识点汇总(列表)
列表的含义 列表由一系列按特定顺序排列的元素组成,是Python中内置的可变序列。 **注:**列表的所有元素放在中括号[]中,相邻的两个元素用逗号分隔; 可将整数、实数、字符串、列表、元组等任何类型的内容放到列表中,且同一列表的元素类型可以不同。 列表的创建和删除 1.…...
新的一年软件测试行业的趋势能够更好?
如果说,2022年对于全世界来说,都是一场极大的挑战的话;那么,2023年绝对是机遇多多的一年。众所周知,随着疫情在全球范围内逐步得到控制,无论是国际还是国内的环境,都会呈现逐步回升的趋势&#…...
Threejs中的Shadow Mapping(阴影贴图)
简而言之,步骤如下: 1.从灯光位置视点(阴影相机)创建深度图。 2.从相机的位置角度进行屏幕渲染,在每个像素点,比较由阴影相机的MVP矩阵计算的深度值和深度图的值的大小,如果深度图值小的话&…...
本质安全设备标准(IEC60079-11)的理解(四)
本质安全设备标准(IEC60079-11)的理解(四) 对于标准中“Separation”的理解 IEC60079-11使用了较长的篇幅来说明设计中需要考虑到的各种间距, 这也从一定程度上说明了间距比较重要,在设计中是需要认真考虑…...
(record)QEMU安装最小linux系统——TinyCore(命令行版)
文章目录QEMU安装最小linux系统——TinyCore参考QEMU使用qemu创建tinycore虚拟机再次启动文件保存QEMU安装最小linux系统——TinyCore 简单记录安装过程和记录点 参考 [原创] qemu 与 Tiny Core tinycore的探索 QEMU qemu不多介绍,这里是在WSL2上安装的linux版…...
C++中的cast类型转换
reinterpret_cast用法:reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果…...
西瓜数据集读取的详细解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...
Mac开发环境配置
一、mac 安装homebrew 1. 必要性 homebrew可以通过bash命令快速安装配置开发环境,并且在大多数情况下可以实现环境的自动配置。(一键安装配置) 2. 收益 节省开发环境工具配置时间,提高人效。 3. 安装步骤 打开mac终端…...
概率论面试题1:玫瑰花
概率论面试题 1. 一个活动,n个女生手里拿着长短不一的玫瑰花,无序的排成一排,一个男生从头走到尾,试图拿更长的玫瑰花,一旦拿了一朵就不能再拿其他的,错过了就不能回头,问最好的策略࿱…...
【DGL】图分类
目录概述数据集定义Data LoaderDGL中的batched graph定义模型训练参考概述 除了节点级别的问题——节点分类、边级别的问题——链接预测之外,还有整个图级别的问题——图分类。经过聚合、传递消息得到节点和边的新的表征后,映射得到整个图的表征。 数据…...
时间复杂度的计算(2023-02-10)
时间复杂度的计算 时间复杂度的计算分为三大类:一层循环、二层循环和多层循环。 一层循环 1.找出循环趟数t及每轮循环i的变化值 2.确立循环停止的条件 3.得出t与i之间的关系 4.联立两式,得出结果 eg: void fun(int n) {int i0;while (i*i*i<n)i;…...
测试开发之Django实战示例 第六章 追踪用户行为
第六章 追踪用户行为在之前的章节里完成了小书签将外站图片保存至本站的功能,并且实现了通过jQuery发送AJAX请求,让用户可以对图片进行喜欢/不喜欢操作。这一章将学习如何创建一个用户关注系统和创建用户行为流数据,还将学习Django的信号框架…...
树莓派GPIO排针焊接与外壳组装全攻略:从焊接技巧到机械装配
1. 项目概述与核心价值如果你手头有一块树莓派,并且打算用它来驱动一个像Joy Bonnet这样的游戏手柄扩展板,或者任何其他需要直接插在GPIO排针上的HAT(硬件附加板),那么你迟早会面临一个非常具体且有点“劝退”的硬件关…...
嵌入式Linux SPI转CAN-FD扩展实战:基于i.MX8MP与MCP2518FD
1. 项目概述:当开发板的CAN口不够用时在嵌入式产品开发中,尤其是工业控制、汽车电子或机器人领域,CAN总线因其高可靠性和实时性被广泛应用。飞凌嵌入式的OKMX8MP-C开发板基于强大的i.MX8M Plus处理器,原生提供了两路CAN-FD总线&am…...
【Midjourney钯金印相风格终极指南】:20年影像工艺专家亲授——从化学印相原理到AI提示词精准转译的7步闭环工作流
更多请点击: https://intelliparadigm.com 第一章:钯金印相工艺的百年历史溯源与数字复兴语境 钯金印相(Platinum/Palladium Printing)诞生于19世纪末,是摄影史上最具质感与耐久性的手工印相工艺之一。其以铂族金属盐…...
骨传导耳机品牌Mojawa完成数千万元A+轮融资,发力AI运动智能平台
硬氪获悉,苏州索迩电子技术有限公司近日完成数千万元人民币的A轮融资,由正海资本领投。资金将用于拓展海外线下渠道和推进产品AI智能化研发。骨传导耳机市场增长显著在音频产品市场,骨传导耳机因无线和开耳式聆听技术需求增加而显著增长。202…...
从换电博弈到芯片浪潮:新能源汽车与半导体产业交叉机遇解析
1. 行业动态深度解析:从换电博弈到芯片浪潮最近行业里几件事儿挺有意思,放在一起看,能品出不少门道。一边是造车新势力在补能路线上开始“左右互搏”,小鹏汽车悄悄注册了一家经营范围包含“新能源汽车换电设施销售”的子公司&…...
Outfit开源字体深度解析:7大优势助力专业设计
Outfit开源字体深度解析:7大优势助力专业设计 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts Outfit字体是一款专为品牌设计和数字界面优化的开源几何无衬线字体,提供从Th…...
Cursor Free VIP:如何轻松突破AI编程助手限制的完整指南
Cursor Free VIP:如何轻松突破AI编程助手限制的完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
百度网盘Mac版SVIP破解终极指南:解锁70倍下载速度的完整方案
百度网盘Mac版SVIP破解终极指南:解锁70倍下载速度的完整方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘Mac版SVIP破解插件是一…...
在多模型AI应用开发中利用Taotoken实现成本与性能的平衡
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多模型AI应用开发中利用Taotoken实现成本与性能的平衡 开发一个复杂的AI应用,往往意味着需要调用多个模型来完成不同…...
DDoS攻击:企业与个人都应了解的基本知识
一、DDoS攻击的基本原理 DDoS攻击的基本原理在于通过超载目标系统、服务或网络的资源,使其无法正常响应合法用户的请求。这类攻击通常涉及大量计算机或设备,这些设备被操纵成一个庞大的“僵尸网络”(botnet)。攻击者利用这个庞大…...
