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.mzph.cn/pingmian/16965.shtml

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

相关文章

Redis篇 String

String概念和set,get扩充 一. String类型的基本介绍二. String中set,get方法扩充 一. String类型的基本介绍 redis中所有的key都是字符串类型的,但是value的类型差异很大. redis中的字符串,直接就是二进制方式存储的,可以存储整数,二进制数据 文本数据,Json,xml还有音频等. 二.…

工作中写单片机代码,与学校里有什么不同?

来聊聊我的经历&#xff0c;提供几个提升方向&#xff0c;亲测有效&#xff0c;希望能让你少走几年弯路。 10几年前&#xff0c;还没参加工作的时候&#xff0c;主要是玩玩开发板&#xff0c;也接触不到实际产品的代码&#xff0c;很好奇那些产品级的代码是怎样的。 第一份工作…

多线程理论及操作

【一】什么是线程 在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程 一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起&#xff…

06_Tomcat

文章目录 Tomcat1.概念2.Tomcat安装3.Tomcat项目结构4.标准web项目结构5.Tomcat部署项目方式6.IDEA关联Tomcat6.1 构建tomcat和idea关联6.2 使用idea创建一个Javaweb工程6.3 使用idea将工程**构建**成一个app6.4 使用idea将构建好的app**部署**到tomcat中 Tomcat 1.概念 Tomc…

Nginx R31 doc-13-Limiting Access to Proxied HTTP Resources 访问限流

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

进程信号(2)

一、信号的处理 进程对应信号的处理的一般步骤就是&#xff1a;先去遍历pending位图&#xff0c;找到比特位为1的位置对应的信号&#xff0c;然后再去检测block位图对应位置的比特位是否为1。若不为1&#xff0c;就hander表的对应位置去调用信号的处理动作函数&#xff0c;若为…

探索增强现实(AR)的未来:超越智能手机与AR滤镜

随着技术的不断进步,增强现实(AR)正逐渐从智能手机和简单的AR滤镜中解放出来,迈向一个全新的时代。Ericsson ConsumerLab的最新研究报告《Augmented tomorrow: AR experiences beyond smartphones and AR filters》为我们提供了一个关于AR技术未来发展的深刻洞见。本文将探…

JS入门学习

JS JavaScript是一门解释型的脚本语言&#xff0c;其是弱类型的&#xff0c;对变量的数据类型不做严格的要求&#xff0c;变量的类型可以在运行过程中变化 JavaScript能改变HTML内容&#xff0c;属性&#xff0c;样式 大纲 使用方式变量运算符数组JS函数自定义对象事件补充 …

训练的过程中内存一直增加的问题(内存泄漏)、如何检查是否内存泄漏

更新于&#xff1a;2024年5月27日09:47:01 经过了漫长的排查&#xff0c;使用tracemalloc也并不能找到哪里内存泄漏&#xff0c;最后只能通过给出的错误去反思&#xff0c;然后再凭感觉去猜测错误所在位置&#xff1a; 所报的错误是&#xff1a; Too many open files&#x…

mysql中InnoDB的表空间--独立表空间

大家好&#xff0c;上篇文章我们在讲mysql数据目录的时候提到了表空间这个名词&#xff0c;它是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ib…

DQL( 数据查询语言)

1. 基本查询 select * from 表名; select 字段,字段2,… from 表名; select * from 表名 where 筛选条件; select 字段,字段2,… from 表名 where 筛选条件; 2. 范围查询 select * from emp where sal 3000; select * from emp where sal ! 3000; select * from emp where s…

node.js学习P3-P10

P3 npm package.json&#xff08;package解读npm工具换镜像源&#xff09; 一个package.json文件可以的作用 作为一个描述文件&#xff0c;描述了你的项目依赖哪些包 &#xff0c;用来干什么的允许我们使用“语义版本规则”&#xff0c;指明你项目依赖的版本让你的构建更好的…

Java绩效考核系统源码 springboot员工绩效考核系统源码

Java绩效考核系统源码 springboot员工绩效考核系统源码-009 源码下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89352195 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&a…

代码随想录训练营Day49、50、52:Leetcode123、188、309、714、300、674、718

Leetcode123&#xff1a; 问题描述&#xff1a; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前…

一文搞定cuda版本、显卡驱动及多CUDA版本管理

安装cuda是每个AI从业人员必经之路。网上关于cuda、显卡驱动已经相关命令很多都解释不清楚&#xff0c;于是本文梳理一下&#xff0c;既方便自己记忆&#xff0c;也方便小白学习。 CUDA 首先&#xff0c;CUDA版本&#xff0c;一般指cuda-toolkit&#xff0c;即cuda开发工具包…

XShell免费版的安装配置

官网下载 https://www.xshell.com/zh/free-for-home-school/ 下载地址 通过邮箱验证 新建会话 通过ssh登录树莓派 填写主机IP 点击用户身份验证 成功连接

hadoop基础之MapReduce的学习

hadoop基础之MapReduce的学习 MapReduce的执行步骤&#xff1a; 1.Map package com.shujia.mr.worcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapp…

24校招总结

个人背景 本科&#xff1a;三本通信专业 硕士&#xff1a;B区双非计算机硕 今年2月签了东南沿海二线城市某公司C游戏服务端开发 我同学大部分都是去电网&#xff0c;大专老师&#xff0c;气象局事业编……就我这个是纯牛马了。 离收到Offer3个月了&#xff0c;前段时间参加…

高项案例分析知识点总结

文章目录 纠错题计算题进度估算成本管理立项管理版本管理组合管理知识产权信息技术计算题运筹学 纠错题 人&#xff1a;人员经验、能力、数量、缺少培训&#xff1b;自己一个人完成需求和计划不正确流程&#xff1a;先做什么&#xff0c;后做什么&#xff0c;流程是否正确。是…

前端基础入门三大核心之JS篇:掌握数字魔法 ——「累加器与累乘器」的奥秘籍【含样例代码】

前端基础入门三大核心之JS篇&#xff1a;掌握数字魔法 ——「累加器与累乘器」的奥秘籍 &#x1f9d9;‍♂️ 基础概念&#xff1a;数字的魔杖与炼金术累加器&#xff08;Accumulator&#xff09;累乘器&#xff08;Multiplier&#xff09; &#x1f4da; 实战演练&#xff1a;…