2024.5.22 关于 SpringCloud —— Nacos 配置管理

目录

Nacos 配置统一管理

Nacos 配置热部署 

Nacos 多环境配置共享

配置优先级


Nacos 配置统一管理


实例理解

  • 我们想要利用 Nacos 在 user-service 的 application.yml 配置文件中新增配置项
  • 此处我们将新增配置日期格式为 yyyy-MM-dd HH:mm:ss
  • 下图为新增 Nacos 配置统一管理后的配置获取步骤

1)在 Nacos 管理平台中新建配置信息

2)在 user-service 的 pom.xml 中引入 Nacos 配置管理客户端依赖

<!--nacos配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3)在 userservice 中的 resource 目录添加一个 bootstrap.yml 文件

spring:application:name: userservice # 服务名称profiles:active: dev # 开发环境 devcloud:nacos:server-addr: localhost:8848 # nacos地址config:file-extension: yaml # 指定配置文件类型

注意:

  • bootstrap.yml 文件为引导文件,其优先级高于 application.yml 
  • 所以我们还需注释掉 application.yml 中重复出现的内容 !

结果验证

1)在 user-service 的 UserController 中创建编写下方代码

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Value("${pattern.dateformat}")private String dateformat;@GetMapping("/now")public String now() {return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}
}
  • 通过 @Value 注解获取配置文件中的 pattern.dateformat 配置项,即日期格式

2)重启 UserApplication,在浏览器的 url 框中输入对应地址,获取当前的日期时间

  • 观察此处日期时间的输出格式,与我们在 Nacos 管理平台新增的配置项日期格式一致

小总结

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

Nacos 配置热部署 

  • Nacos 中的配置文件变更后,微服务无需重启变可感知

方式一

  • 在 @Value 注入的变量所在类上添加注解 @RefreshScope


方式二

  • 使用 @ConfigurationProperties 注解
  • 相较于方式一,此处更推荐方式二

1)在 user-service 中新创建一个 PatternProperties 类

package cn.itcast.user.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;
}

2)仅需细微改动 UserController 中的代码,让其注入 PatternProperties Bean 对象即可

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate PatternProperties properties;@GetMapping("/now")public String now() {return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));}
}

3)重启 UserApplication 即可实现配置热部署


结果验证

  • 此处我们希望通过修改上文已配置的日期格式,来检测是否已成功实现配置热更新

1)在 nacos 配置管理中选择 userservice-dev.yaml 并点击编辑

2)修改配置项,即修改日期格式

3)无需重启 user-service ,直接在浏览器中输入对应 url 路径

  • 由上图可知,此处我们已成功实现配置热更新

小总结

  • Nacos 配置更改后,微服务实现热更新有两种方式
  1. 通过 @Value 注解注入,结合 @RefreshScope 注解来刷新
  2. 通过 @ConfigurationProperties 注入,自动刷新(推荐)

注意事项

  • 不是所有的配置都适合放到配置中心,维护起来比较麻烦
  • 建议将一些关键数据,需要运行时调整的参数放到 Nacos 配置中心,一般都是自定义配置

Nacos 多环境配置共享

  • 微服务启动时会从 Nacos 中读取多个配置文件
  1. [spring.application.name]-[spring.profiles.active].yaml,例如 userservice-dev.yaml
  2. [spring.application.name].yaml,例如 userservice.yaml

注意:

  • 无论 profile 如何变化,[spring.application.name].yaml 文件一定会被加载
  • 因此当我们进行多环境共享配置时,可直接写入该文件中

实例理解

  • 我们想要利用 Nacos 在 user-service 的 application.yml 配置文件中新增配置项

1)在 Nacos 管理平台中新建配置信息

2)与区别上文所配置的 userservice-dev.yaml


结果验证

1)修改 user-service 中的 PatternProperties 类,让其能够获取到 envShareValue

package cn.itcast.user.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;private String envShareValue;
}

2)在 user-service 的 UserController 类中,添加下方代码

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate PatternProperties properties;@GetMapping("/prop")public PatternProperties properties() {return properties;}
}

3)我们将 UserApplication 8081 的环境设为 dev,并将其重新启动

4)我们将 UserApplication 8082 的环境设为 test,并将其重新启动

5)在浏览器中输入对应的 url 路径访问 UserApplication 8081 的接口

  • 如上图所示,8081 成功获取到 dateformat 和 envShareValue 这两个配置项的值
  • 因为 8081 的环境为 dev,所以能够加载 userservice-dev.yaml 中的配置项

6)在浏览器中输入对应的 url 路径访问 UserApplication 8082 的接口

  • 如上图所示,8082 仅获取到 envShareValue 这两个配置项的值
  • 因为 8082 的环境为 test,因此无法加载 userservice-dev.yaml 中的配置项

配置优先级


小总结

  • 微服务会从 Nacos 中读取的配置文件
  1. [服务名]-[spring.profile.active].yaml,环境配置
  2. [服务名].yaml,默认配置,多环境共享
  • 关于优先级
  1. [服务名]-[环境].yaml > [服务名].yaml > 本地配置

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

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

相关文章

基于STM32实现智能园艺系统

目录 引言环境准备智能园艺系统基础代码示例&#xff1a;实现智能园艺系统 土壤湿度传感器数据读取水泵控制温湿度传感器数据读取显示系统用户输入和设置应用场景&#xff1a;智能农业与家庭园艺问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式系统…

基于Zynq 7000 SoC的迁移设计

基于Zynq 7000 SoC的迁移设计 Vivado IDE工具使用IP集成器进行嵌入式开发。各种IP Vivado IDE IP目录中提供&#xff0c;以适应复杂的设计。您也可以添加 自定义IP到IP目录。 您可以将基于Zynq 7000平台处理器的设计迁移到Vivado design Suite中 使用以下步骤。 1.生成系统基础…

【搜索方法推荐】高效信息检索方法和实用网站推荐

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

亚马逊云主管马特·加尔曼面临压力,致力于在人工智能领域赶超竞争对手

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

四川景源畅信:抖音小店新手如何做?

随着短视频平台的兴起&#xff0c;抖音小店成为了许多创业者的新选择。但是&#xff0c;对于新手来说&#xff0c;如何在抖音上开设并经营好自己的小店呢?本文将围绕这一问题展开讨论。 一、明确目标和定位作为抖音小店的新手&#xff0c;首先要明确自己的经营目标和定位。是想…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

Pycharm最新安装教程(最新更新时间2024年5月27日)

ps&#xff1a;本教程Pycharm安装&#xff0c;最新更新时间&#xff1a;2024年5月27日&#xff0c;公众号持续更新关注公众号防失联哦 Pycharm 再次更新了一个小版本。又回到老话题&#xff0c;2023.3.2这个版本是否还能安装&#xff0c;笔者也亲测了一下。还是沿用本站之前的…

刷题之从前序遍历与中序遍历序列构造二叉树(leetcode)

从前序遍历与中序遍历序列构造二叉树 前序遍历&#xff1a;中左右 中序遍历&#xff1a;左中右 前序遍历的第一个数必定为根节点&#xff0c;再到中序遍历中找到该数&#xff0c;数的左边是左子树&#xff0c;右边是右子树&#xff0c;进行递归即可。 #include<vector>…

零基础PHP入门(一)选择IDE和配置环境

配置环境 官网下载安装包&#xff0c;windows https://windows.php.net/download#php-8.3 我是下载的最新版&#xff0c;也可以切换其他版本 https://windows.php.net/downloads/releases/archives/ 下载好压缩文件后&#xff0c;双击解压到一个目录 D:\soft\php 复制ph…

技术贴 | Query 物理计划构建指南

在往期博客《执行器 - Query 执行详解》中&#xff0c;我们介绍到到一条 Query 的 SQL 语句需要经过&#xff1a;词法分析 —— 生成 AST 语法树 —— 生成物理计划。本期博客我们接续上篇讲解一条 Query 语句物理计划的具体结构&#xff0c;以及如何构建物理计划。 物理计划是…

无人机技术:倾转旋翼飞行器的关键技术详解

一、总体设计 倾转旋翼飞行器作为一种独特的垂直起降与水平巡航的航空器&#xff0c;其总体设计是关键技术之一。总体设计涵盖了飞行器的整体布局、重量分配、气动性能、机械结构设计等多个方面。在总体设计中&#xff0c;需要充分考虑飞行器的垂直起降、悬停、过渡飞行和水平…

Android14之Binder调试(二百一十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

气泡水位计的安装方法详解(二)

气泡水位计的安装方法详解&#xff08;二&#xff09; 产品简介 气泡式水位计ZL-BWL-013是一款适用于水文、水利信息化建设领域的新一代水位测量类设备&#xff0c;产品执行GB/T 11828.2-2022标准。ZL-BWL-013气泡水位计&#xff0c;具有安装方便、易于操作&#xff0c;高精度…

【leetcode2028. 找出缺失的观测数据(自己写出来了)】

给你一个长度为 m 的整数数组 rolls &#xff0c;其中 rolls[i] 是第 i 次观测的值。同时给你两个整数 mean 和 n 。返回一个长度为 n 的数组&#xff0c;包含所有缺失的观测数据&#xff0c;且满足这 n m 次投掷的 平均值 是 mean 。如果存在多组符合要求的答案&#xff0c;只…

Springboot阶段项目---《书城项目》

一 项目介绍 本项目采用集成开发平台IntelliJ IDEA开发了在线作业成绩统计系统的设计与实现&#xff0c;实现了图书商城系统的综合功能和图形界面的显示&#xff0c;可以根据每个用户登录系统后&#xff0c;动态展示书城首页图书&#xff0c;实现了分类还有分页查询&#xff0c…

【加密与解密(第四版)】第十六章笔记

第十六章 脱壳技术 16.1 基础知识 壳的加载过程&#xff1a;保存入口参数、获取壳本身需要使用的API地址、解密原程序各个区块的数据、IAT的初始化、重定位项的处理、HOOK API、跳转到程序原入口点 手动脱壳步骤&#xff1a;查找真正的入口点、抓取内存映像文件、重建PE文件&…

图论(二)-图的建立

引言&#xff1a; 建图&#xff0c;将图放进内存的方法 常用的建图方式&#xff1a;邻接矩阵&#xff0c;邻接链表&#xff0c;链式前向星 一、邻接矩阵 通过一个二维数组即可将图建立&#xff0c;邻接矩阵&#xff0c;考虑节点集合 &#xff0c;用一个二维数组定义邻接矩…

LINUX环境基础练习题(附带答案)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

LLM提示工程的技巧

1. 从简单开始&#xff08;Start Simple&#xff09; 避免在一开始就增加太多的复杂性。 从简单的提示开始&#xff0c;然后在后续提示中添加更多信息和上下文。 这样&#xff0c;提示就是一个迭代过程&#xff0c;提示在此过程中进一步发展。 从简单的开始&#xff0c;就有足…

2024.05.27学习记录

1、面经复习&#xff1a; 实际工作经验章节 2、代码随想录刷题&#xff1a;动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容