2024.5.22 关于 SpringCloud —— Nacos 配置管理

news2024/9/17 3:56:19

目录

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 # 开发环境 dev
  cloud:
    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 {

    @Autowired
    private 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 {

    @Autowired
    private 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.coloradmin.cn/o/1703626.html

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

相关文章

Latex公式编辑:在矩阵内画横线与竖线

在LaTeX中&#xff0c;要在矩阵内绘制横线和竖线&#xff0c;我们通常使用array或matrix环境&#xff0c;并结合\hline&#xff08;用于横线&#xff09;和|&#xff08;用于竖线&#xff09;来实现。但需要注意的是&#xff0c;\hline通常用于表格环境中。 LaTeX中绘制分块矩阵…

jQuery事件导读+其它方法

jQuery 事件导读一、事件注册二、事件处理1.内容2.例子&#xff0c;微博绑定事件3.off解绑事件4.自动触发事件 三、事件对象 其他方法一、拷贝对象二、多库共存三、插件 事件导读 一、事件注册 单个事件叫注册&#xff0c;多个事件叫处理 二、事件处理 1.内容 2.例子&#…

BUUCTF-misc刷题

被嗅探的流量1 用wireshark打开附件&#xff0c;Ctrlf&#xff0c;然后搜索flag&#xff0c;我们在这么多数据包中搜索带有flag字符的 然后第一个包中上传了一个名叫flag的.jpg文件 然后直接ctrlf&#xff0c;搜索flag{ 得到flag&#xff1a;flag{da73d88936010da1eeeb36e945e…

【简单介绍下线性回归模型】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

51单片机-实机演示(单多个数码管)

仿真链接&#xff1a; http://t.csdnimg.cn/QAPhx 目录 一.引脚位置 二.多个显示 三 扩展 一.引脚位置 注意P00 - >A ; 这个多个的在左边,右边的A到B是控制最右边那个单个的. 接下来上显示单个的代码 #include <reg52.h> #include <intrins.h> #define u…

【MySQL事务(上)】

文章目录 前言一、什么是事务&#xff1f;1.关于事务的特性 二、为什么要有事务三、事务的提交方式测试事务准备工作事务的操作1.启动事务2.对事务进行回滚&#xff08;只有在事务进行期间&#xff09;3.提交事务&#xff08;持久化&#xff09;4.事务的异常情况结论 四、事务的…

漫步者x1穷鬼耳机双耳断连

困扰了我两天&#xff0c;终于有时间解决这个问题了&#xff0c;查看了一堆都是别的型号。怎么没人用这个啥按键都没有的耳机QAQ&#xff0c;幸好给我找到了说明书&#xff0c;啊哈哈&#xff01; 说明书地址

RS8557XF功能和参数介绍及PDF资料

RS8557XF是一款单通道精密运算放大器&#xff0c;其主要特点包括高精度、低偏移电压、低输入偏置电流和低噪声。以下是该产品的部分参数和功能介绍&#xff1a; 增益带宽积 (GBW): 4.3 MHz&#xff0c;这使得该运放适用于较宽频率范围内的信号处理。 输入偏置电流: 650 μA&…

二叉树尾部分

1.二叉树的销毁 2.二叉树的层序遍历 3.判断二叉树是否为完全二叉树 4.二叉树的性质 1.二叉树的销毁 以后序的方式遍历销毁左右子数&#xff0c;因为前序和中序销毁的话根会被销毁而找不到左右子树的位置&#xff0c;后序的根访问在最后&#xff0c;可以找到左右的子树位置。…

大模型时代的具身智能系列专题(二)

李飞飞团队 李飞飞是华人在AI领域最具影响力的学者之一&#xff0c;她是斯坦福大学人工智能实验室&#xff08;SAIL&#xff09;教授&#xff0c;美国国家工程院院士&#xff0c;知名CV数据集ImageNet的牵头人&#xff0c;斯坦福视觉与学习实验室&#xff08;SVL&#xff09;的…

单链表OJ题(课堂总结)

1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环&#xff1f; 最常见的方法就是利用快慢指针&#xff0c;快指针追加慢指针&#xff0c;当二者相等的时候即可判断链表带环 其实现的代码如下&#xff1a; bool hasCycle(struct ListNode*head) { s…

驱动开发中引入私有数据的原因

系列文章目录 驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 系列文章目录驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 驱动开发中引入私有数据&#xff08;Private Data&#xff09;概念主要是为了解决以下几个关键问题&#xff1a; 1.多设备支…

Scikit-Learn朴素贝叶斯

Scikit-Learn朴素贝叶斯 1、朴素贝叶斯1.1、贝叶斯分类1.2、贝叶斯定理1.3、贝叶斯定理的推导1.4、朴素贝叶斯及原理1.5、朴素贝叶斯的优缺点2、Scikit-Learn朴素贝叶斯2.1、Sklearn中的贝叶斯分类器2.2、Scikit-Learn朴素贝叶斯API2.3、Scikit-Learn朴素贝叶斯实践(新闻分类与…

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前&#xff0c;我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器&#xff08;R0-R15&#xff09;&#xff0c;其中R13&#xff0c;R14&#xff0c;R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

前端开发攻略---三种方法解决Vue3图片动态引入问题

目录 1、将图片放入public文件夹中 2、使用 /src/.... 路径开头 3、生成图片的完整URL地址&#xff08;推荐&#xff09; 1、将图片放入public文件夹中 使用图片&#xff1a;路径为 /public 开头 <template><div><img :src"/public/${flag ? 01 : 02}.jp…

JMeter 测试单节点与集群的并发异常率

一. JMeter 测试单节点与集群的并发异常率 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 单个tomcat测试结果(2000个用户&#xff0c;每个用户访问100次) nginx集群负载均衡tomcat结果(2000个用户&#xff0c;每个用户访问100次)

【机器学习300问】101、1x1卷积有什么作用?

卷积神经网络最重要的操作就是卷积层的卷积操作&#xff0c;之前文章中介绍过&#xff0c;卷积核filter往往都是3x3或者5x5什么的&#xff0c;但有一种非常特殊的卷积——1x1卷积。他在CNN中扮演着非常重要的角色。 一、通道维度的降维/升维 这是1x1卷积最显著的作用之一。通过…

眼底项目经验

眼底项目经验 可解释性不足问题眼底项目有多牛逼可解释性不足解法数据、算力、算法都免费送不仅预测当下&#xff0c;还能预测未来和慢病管理整合&#xff0c;形成一个实时健康检测生态 可解释性不足问题 今天下午和腾讯眼底项目人员讨论, 他们不准备做全身性的多疾种, 因为深…

按尺寸筛选轮廓图中的轮廓

1.按短边筛选 原始轮廓图&#xff1a; import cv2 import numpy as np# 读取轮廓图 contour_image cv2.imread(..\\IMGS\\pp_edge.png, cv2.IMREAD_GRAYSCALE)# 使用cv2.findContours()函数获取所有轮廓 contours, _ cv2.findContours(contour_image, cv2.RETR_EXTERNAL, cv2…

使用 Python 编程语言进行供应链分析

前言 要分析一家公司的供应链&#xff0c;我们需要供应链不同阶段的数据&#xff0c;如有关采购、制造、运输、库存管理、销售和客户人口统计的数据。我为这项任务找到了一个理想的数据集&#xff0c;其中包括一家时尚和美容初创公司的供应链数据。 1. 相关数据集 让我们导入…