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 # 开发环境 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 > 本地配置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS for LabVIEW:实现LabVIEW与ROS的无缝集成

ROS for LabVIEW是由Tufts大学开发的一套VI集合&#xff0c;旨在实现LabVIEW与ROS&#xff08;Robot Operating System&#xff09;的无缝集成。ROS是一个灵活的机器人软件框架&#xff0c;而LabVIEW则是一种强大的图形化编程工具。这个工具包的推出使得LabVIEW用户能够直接与R…

针对上两篇微信同声传译语音播报功能,又出现了坑

我又双叒叕来了&#xff0c;自己写的bug&#xff0c;跪着也要改完&#xff0c;我是真的服了 首先&#xff0c;我们来说说是什么问题吧 上一篇文章的这张图还记得吧&#xff0c;不记得的&#xff0c;我在下面贴出来了&#xff1b; 我们在长度大于300的时候&#xff0c;根据句号…

dp + 计数,1954D - Colored Balls

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1954D - Codeforces 二、解题报告 1、思路分析 本题前置题目&#xff1a; 1953. 你可以工作的最大周数 通过前置题目可以知道如何计算两两不同数对序列的最大长度 我们记最大数量为ma&#xf…

景源畅信电商:做抖店的成本高吗?

在当今数字化时代&#xff0c;抖音不仅仅是一个分享短视频的平台&#xff0c;更是一个充满商机的市场。随着抖音用户量的激增&#xff0c;越来越多的商家和个人开始关注在抖音上开设店铺&#xff0c;即所谓的“抖店”。那么&#xff0c;做抖店的成本高吗?这个问题困扰着许多初…

剖析【C++】——类与对象(上)超详解——小白篇

目录 1.面向过程和面向对象的初步认识 1.面向过程&#xff08;Procedural Programming&#xff09; 2.面向对象&#xff08;Object-Oriented Programming&#xff09; 概念&#xff1a; 特点&#xff1a; 总结 2.C 类的引入 1.从 C 语言的结构体到 C 的类 2.C 中的结构…

InTouch历史报警、历史事件按时段查询,导出

简介&#xff1a;本插件基于上位机组态InTouch的历史报警、操作记录而开发 适用InTouch版本&#xff1a;不限 适用Windows系统&#xff1a;不限 适用数据库&#xff1a;SQL Server 标记名点数&#xff1a;不限 配套软件安装&#xff1a;Excel、WPS、SQL Server 功能&…

【C++初阶】—— 类和对象 (上)

&#x1f4dd;个人主页&#x1f339;&#xff1a;EterNity_TiMe_ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 类和对象 1. 初步认识C2. 类的引入3. 类的定义声明和定义全部放在类体中声明和定义分开存放 4.…

内网横向移动小补充 --->PTK

大家别急&#xff0c;我的基于资源的约束性委派攻击还在写&#xff0c;这个东西一时半会讲不清楚&#xff0c;所以我在这里先来补充一点横向移动以前没说好的东西&#xff01;&#xff01;&#xff01; 在更啦&#xff0c;别催啦~~~~ 还记得我之前在内网渗透里面讲过这个PTK&a…

二分例题(D.负重越野,I.路径规划)

这两天的训练赛都有一道二分的题&#xff0c;但是都没往二分上面想&#xff0c;同样不知道怎么二分。 D. Fast and Fat 思路 二分的关键也就是check函数怎么写了&#xff0c;求队伍最大速度&#xff0c;可以分为速度>mid和<mid两部分&#xff0c;再判断&#xff0c;能不…

乡村振兴的乡村旅游新模式:挖掘乡村旅游资源,创新旅游开发方式,打造乡村旅游新品牌,助力美丽乡村建设

目录 一、引言 二、乡村旅游资源挖掘 1、自然景观资源 2、人文历史资源 3、农业产业资源 三、旅游开发方式创新 1、多元化旅游产品 2、体验式旅游模式 3、智慧旅游建设 四、乡村旅游新品牌打造 1、品牌定位与策划 2、品牌传播与推广 3、品牌维护与提升 五、助力美…

【面试必看】Java并发

并发 1. 线程 1. 线程vs进程 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。 系统运行一个程序即是一个进程从创建&#xff0c;运行到消亡的过程。在 Java 中&#xff0c;当我们启动 main 函数时其实就是启动了一个 JVM 的进…

英语新概念2-回译法-lesson16

第一次回译 if you ___ your car on a wrong place, the traffic police man will find you quickly. If he do not give you the ticket,you are lucky.However,the ___ not all like this,The police man is __ sometimes.I had a holiday in Sweden, I found a ___ in my c…

QT安装和配置[安装注意点][QT找不到python27.dll][缩小空间]

安装注意点 本文摘录于&#xff1a;https://blog.csdn.net/Python_0011/article/details/131699443只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 双击"qt-online-installer-windows-x64-4.8.0.exe"文件后输入账号选择如下控…

spring boot3整合邮件服务实现邮件发送功能

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 内容概要 开通服务 依赖引入 配置属性 创建邮件发送工具类 测试 最近发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

小白不知道怎么投稿?记住这个好方法

作为一名单位信息宣传员,我最初踏上这条道路时,满心憧憬着通过文字传递我们单位的精彩瞬间,让社会听见我们的声音。然而,理想与现实之间的距离,却在一次次邮箱投稿的石沉大海中渐渐清晰。那时的我,像所有“小白”一样,以为只要用心撰写稿件,通过电子邮件发给各大媒体,就能收获满…

大规模团队的数据库开发,如何用OceanBase工具快速建立企业级账号体系

前言 为了让数据库开发的安全性与可靠性得以充分保障&#xff0c;数据库开发工具的管控能力显得尤为关键。构建一个健全的账号体系&#xff0c;能够协助开发团队实现对数据库开发工具的全方位管控&#xff0c;从而有效防范各类数据安全隐患&#xff0c;确保数据库开发的顺利进…

BFS解决最短路问题(详解)

目录 BFS简介 && 框架&#xff1a; 一.二叉树的最小深度 二&#xff1a;迷宫中里入口最近的出口&#xff1a; 三.最小基因变化: 四&#xff1a;单词接龙&#xff1a; ​五&#xff1a;为高尔夫比赛砍树&#xff1a; BFS简介 && 框架&#xff1a; 说到BFS…

【JAVASE】接口(上)

一&#xff1a;接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本上上的USB接口。 电脑上的USB口上可以插:U盘、鼠标、键盘等。 电源插座插孔上可以插入&#xff1a;电脑、电视机等。 通过以上例子可以看出&#xff1a;接口就是公共…

stm32学习-AD单通道

配置流程 初始化 1.开启RCC时钟&#xff08;ADC、GPIO和ADCCLK的预分频器的时钟&#xff09; void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); 作用&#xff1a;配置预分频器系数。&#xff08;可以对APB2的72MHz时钟选择2/4/6/8分频&#xff0c;输入到ADCCLK中&#xff09; …

连续数组 ---- 前缀和

题目链接 题目: 分析: 如果我们直接做这道题, 有点麻烦如果我们将所有的0都变成1, 那么找到数量相同的0和1的最长连续子数组, 就是找最长连续子数组的和为0, 那么就和之前的题目<找到和为k的子数组>有点像, 需要用前缀和哈希表来完成在[0,i-1]区间找到前缀和 sum[i] - …