当前位置: 首页 > news >正文

Nacos配置中心、配置热更新、及配置共享的记录

Nacos除了提供了注册中心的功能,同样也提供了配置中心的功能,用于管理一些叫常改动的配置

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新

下面我们就来使用Nacos配置一下服务的(部分)配置文件

这里说部分还是因为在上面说的我们不会把所有的信息都配置到服务中, 只是把一些常修改的配置单独提出来

项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

1. 在Nacos里添加配置文件

步骤1 添加配置:

在nacos主界面的配置列表中点击加号

在这里插入图片描述

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

ID配置规则: 服务名-配置类型.后缀

分组默认即可

在这里插入图片描述

步骤2 从微服务拉取配置

上面我们只是在Nacos中创建了配置文件,但是在真实的微服务项目中还没有使用,此时需要在服务中拉取对应的配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

此时要做的就是将我们的配置和服务中的配置一并生效

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

在这里插入图片描述

此时就可以读取到我们在Nacos中配置的文件

  1. 引入nacos-config依赖

在user-service服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><!-- 像这种通用的版本配置我们一般交给父工程管理,这里我先加上 --><version>2.2.6.RELEASE</version>  
</dependency>
  1. 添加bootstrap.yaml

然后,在user-service的resources目录添加一个bootstrap.yaml文件,内容如下:

spring:application:name: userservice # 服务名称profiles:active: dev #开发环境,这里是dev cloud:nacos:server-addr: 127.0.0.1:80 # Nacos地址 因为我配置了Nacos集群环境这里我就写我的Nginx地址config:file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

本例中,就是去读取user-service-dev.yaml

在这里插入图片描述

此时就可以读取在Nacos配置中心配置的配置项

  1. 读取nacos配置

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:

使用@Value注解,再使用$表达式,指定对应的配置,即可注入获取到具体的值,后面就可以使用读取到的内容了

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Value("${pattern.dateformat}")   // 读取配置private String dateformat;@GetMapping("/now")public String now(){return new SimpleDateFormat(dateformat).format(new Date())}// ...略
}

在页面访问,可以看到效果:

在这里插入图片描述

2. 配置热更新

所谓的热更新就是在修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

要实现配置热更新,可以使用两种方式:

方式一 通过@Value注解+ @RefreshScope注解

注解看刚才的代码

@Slf4j
@RestController
@RefreshScope 
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Value("${pattern.dateformat}")   // 读取配置private String dateformat;@GetMapping("/now")public String now(){return new SimpleDateFormat(dateformat).format(new Date())}// ...略
}

此时当Nacos配置文件中的pattern.dateformat发生对应的@Value读取到的数据也会更改

方式二 使用@ConfigurationProperties

这个注解可能在之前用过,作用时批量的读取配置信息,而在这里@ConfigurationProperties注解天然支持配置文件的热更新

在user-service服务中,添加一个类,读取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:

@Slf4j
@RestController
// @RefreshScope 
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;// 注入配置类@Autowiredprivate PatternProperties patternProperties;@GetMapping("/now")public String now(){return new SimpleDateFormat(patternProperties.getDateformat()).format(new Date())}
}

这两种方式都可以实现当Nacos中的配置文件更新时,对应的读取配置的地方也做相应的更新

那么什么时候使用第一种什么时候使用第二种热更新方式呢?

对于第一种我们会发现很方便, 直接在对相应的成员变量和类上添加对应的注解即可.但是不好的地方是如果有多个配置需要读取时, 我们就需要写一大~~~~堆,此时在这种方式就很麻烦,而此时使用第二种方式就很好, 自动的一次性赋值

总结: 当少于两个配置的时候使用第一种方式, 当大于两个使用第二种方式进行配置的热更新

3. 配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:user-service-dev.yaml

  • [spring.application.name].yaml,例如:user-service.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

那下面我们我们就对其做一个测试,

  1. 在Nacos中添加一个共享的配置

    我们在nacos中添加一个user-service.yaml文件:

在这里插入图片描述

  1. 在user-service中读取共享配置

    这里使用热更新的方式一

@Slf4j
@RestController
@RefreshScope
@RequestMapping("/user")
public class UserController {    // 公共配置@Value("${commons.message}")private String message;// 独有的配置@Value("${pattern.format}")private String pattern;@GetMapping("/show")public String showMessage() {return new SimpleDateFormat(pattern).format(new Date()) + message;}
}

此时访问可以看到已经读取到了公共的配置

在这里插入图片描述

此时创建一个user-service示例,作为test实例,修改其配置文件

然后右键当前拷贝后的配置,编辑当前的配置

在这里插入图片描述

操作如下: 修改端口

在这里插入图片描述

在这里插入图片描述

可以看到这里有一个Active profiles的配置, 因为我们较常修改这些配置,所以idea就给提出来了,他对应的就是我们在配置文件中配置的配置项,来指定当前的实例是dev还是test

在这里插入图片描述

此时就会多一个为test版的服务实例,我们在Nacos创建对应的配置文件

在这里插入图片描述

这里日期的格式化故意和dev环境区别

此时运行项目访问两个user-service服务查看结果

在这里插入图片描述

共享信息都读取到了,测试成功

配置文件优先级问题

我们回顾一下,我们的配置可以在本地配置,可以在共享配置中配置也可以在nacos对应配置文件中配置,那么谁的优先级更高呢?即当同时又一个配置时谁生效呢? 优先级如下:

在这里插入图片描述

相关文章:

Nacos配置中心、配置热更新、及配置共享的记录

Nacos除了提供了注册中心的功能,同样也提供了配置中心的功能,用于管理一些叫常改动的配置 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#xff0c;可以集中…...

MATLAB | 绘图复刻(八) | 堆叠柱状图+哑铃图

本次复刻的是Nature Communications中Friedman, S.T., Muoz, M.M. A latitudinal gradient of deep-sea invasions for marine fishes. Nat Commun 14, 773 (2023). https://doi.org/10.1038/s41467-023-36501-4的Fig1图像&#xff1a; 复刻效果&#xff1a; 文章可在如下网站下…...

Scala之集合(2)

目录 集合基本函数&#xff1a; &#xff08;1&#xff09;获取集合长度 &#xff08;2&#xff09;获取集合大小 &#xff08;3&#xff09;循环遍历 &#xff08;4&#xff09;迭代器 &#xff08;5&#xff09;生成字符串 &#xff08;6&#xff09;是否包含 衍生集合…...

【图像分割】视觉大模型SEEM(Segment Everything Everywhere All at Once)原理解读

文章目录 摘要&#xff08;效果&#xff09;二、前言三、相关工作四、method4.1 多用途4.2 组合性4.3 交互式。4.4 语义感知 五、实验 论文地址&#xff1a;https://arxiv.org/abs/2304.06718 测试代码&#xff1a;https://github.com/UX-Decoder/Segment-Everything-Everywher…...

Linux: command: ibstat; infiniband

文章目录 如何在Linux上安装infiniband相关的软件。ibstat相关资料 如何在Linux上安装infiniband相关的软件。 https://access.redhat.com/solutions/301643 https://docs.oracle.com/cd/E19436-01/820-3522-10/ch3-linux.html yum groupinstall “Infiniband Support” Pack…...

UML简介与类图详解

1 UML简介 1.1 UML是什么 UML&#xff0c;全称为Unified Model Language&#xff0c;即统一建模语言&#xff0c;是由一整套图表组成的&#xff0c;为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。UML 代表了一组最佳工程实践&#xff0c;这些实践已被证明在…...

【每日一题】1994.好子集的数目

1994.好子集的数目 题目描述解决方案&#xff1a;状态压缩动态规划代码&#xff1a;Python 题目来源&#xff1a;LeetCode 原文链接&#xff1a;https://mp.weixin.qq.com/s/myI7_ZwJM7kizrwUtWgAZQ 难度级别&#xff1a;困难 题目描述 给你一个整数数组 nums。如果 nums 的一…...

坚持伙伴优先,共创数据存储新生态

4 月 26 日&#xff0c;2023 阿里云合作伙伴大会上&#xff0c;阿里巴巴集团董事会主席兼 CEO、阿里云智能集团 CEO 张勇表示&#xff0c;阿里云的核心定位是一家云计算产品公司&#xff0c;生态是阿里云的根基。让被集成说到做到的核心&#xff0c;是要坚定走向“产品被集成”…...

树形结构的三级分类如何实现?

概述&#xff1a; 本三级联动分类服务端使用的是: Springboot MyBatis-plus&#xff0c;前端使用的是&#xff1a;VueElementUI&#xff0c;树形控件使用的是el-tree。本三级联动分类可以把任一子项拖拽到其它目录&#xff0c;可以添加、编辑、删除分类。 效果图&#xff1a…...

SSM整合完整流程

&#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司实习&#x1f…...

虹科方案 | 助力高性能视频存储解决方案-2

上篇文章《虹科方案 | 助力高性能视频存储解决方案-1》我们分享了虹科&ATTO 和 Avid 共同创建协作解决方案&#xff0c;助力高性能视频存储&#xff0c;今天我们再深入介绍一下我们的案例详情。 一、行业挑战 从高端广播设施到小型独立工作室的媒体后期制作环境都需要允许多…...

java版深圳 工程管理系统软件 自主研发,工程行业适用 软件源码

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…...

云原生Istio架构和组件介绍

目录 1 Istio 架构2 Istio组件介绍2.1 Pilot2.2 Mixer2.3 Citadel2.4 Galley2.5 Sidecar-injector2.6 Proxy(Envoy)2.7 Ingressgateway2.8 其他组件 1 Istio 架构 Istio的架构&#xff0c;分为控制平面和数据面平两部分。 - 数据平面&#xff1a;由一组智能代理&#xff08;[En…...

吹爆,全网第一个手把手教你从零开始搭建Spring Cloud Alibaba的笔记

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别&#xff1f; SpringCloud&#xff1a; 部分组件停止维护和更新&#xff0c;给开发带来不便;SpringCl…...

企业短信遭疯狂盗用,可能是没配置验证码

手机短信作为一种快捷的通讯方式被广泛应用。不仅在个人日常生活中&#xff0c;企业也习惯使用手机短信来进行验证和提醒&#xff0c;以保证业务的正常进行。随着数字化的发展&#xff0c;手机短信也成为了不法分子滥用的目标之一&#xff0c;给个人和企业带来不同经济损失。 个…...

【UE】直升机沿样条线移动

效果 步骤 1. 将虚幻商城中的免费资产导入工程 下载完毕后可以看到如下文件 2. 新建一个Actor蓝图类&#xff0c;命名为“Track”&#xff0c;这个蓝图就是用来画样条线的 打开“Track”&#xff0c;添加样条组件 3. 打开“BP_West_Heli_AH64D” 在事件图表中先新建一个时间轴…...

GaussDB_200_6.5.1部署安装

目录 安装前准备 安装依赖 修改/etc/hosts 上传解压介质 预安装 拷贝安装包 预安装配置 编辑preinstall.ini配置文件 编辑host0配置文件 执行预安装命令 安装FusionInsight_Manager 修改install安装配置文件 执行安装命令 web操作安装数据库 GaussDB200测试 配…...

软件工具 | Python调用运筹优化求解器(一):以CVRPVRPTW为例

目录 1. 引言2. 求解器介绍3. 基础语言3.1 创建模型3.2 添加变量3.3 添加目标函数3.4 添加约束3.5 设置参数3.6 求解 4. 数学模型4.1 [CVRP数学模型](https://mp.weixin.qq.com/s/DYh-5WkrYxk1gCKo8ZjvAw)4.2 [VRPTW数学模型](https://mp.weixin.qq.com/s/tF-ayzjpZfuZvelvItue…...

如何在JAVA中实现网络编程?

在Java中实现网络编程通常需要使用Java提供的网络编程库——Java Networking API。Java Networking API支持常见的TCP和UDP协议&#xff0c;包括Socket、ServerSocket、DatagramSocket等类&#xff0c;通过这些类&#xff0c;我们可以创建、连接、监听和传输数据。 下面是在Ja…...

【redis】redis的缓存过期淘汰策略

【redis】redis的缓存过期淘汰策略 文章目录 【redis】redis的缓存过期淘汰策略前言一、面试题二、redis内存满了怎么办&#xff1f;1、redis默认内存是多少&#xff1f;在哪查看&#xff1f;如何修改?在conf配置文件中可以查看 修改&#xff0c;内存默认是0redis的默认内存有…...

ASP.NET动态Web开发技术第8章

第8章ASP.NET数据访问 一.预习笔记 1.SqlDataSource控件 SqlDataSource数据源控件支持连接SQL关系数据库&#xff0c;它使用SQL命令来检索和修改数据。通常将SqlDataSource数据源控件与数据绑定控件一起使用。 属性1&#xff1a;ID&#xff1a;当前数据源控件的唯一标识符 …...

【旋转编码器如何工作以及如何将其与Arduino一起使用】

在本教程中,我们将学习旋转编码器的工作原理以及如何将其与Arduino一起使用。您可以观看以下视频或阅读下面的书面教程。 1. 概述 旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。 有许多不同类型的旋转编码器按输出信号或传感…...

Tre靶场通关过程(linpeas使用+启动项编辑器提权)

Tre靶场通关 通过信息收集获得到了普通用户账号密码&#xff0c;利用PEASS-ng的linpeas脚本进行提权的信息收集&#xff0c;根据已有信息进行提权。 靶机下载地址&#xff1a; https://download.vulnhub.com/tre/Tre.zip 信息收集 靶机IP探测&#xff1a;192.168.0.129 a…...

java多线程下

ThreadLocal ThreadLocal 有什么用&#xff1f;通常情况下&#xff0c;我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢&#xff1f;JDK 中自带的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就…...

使用无标注的数据训练Bert

文章目录 1、准备用于训练的数据集2、处理数据集3、克隆代码4、运行代码5、将ckpt模型转为bin模型使其可在pytorch中运用 Bert官方仓库&#xff1a;https://github.com/google-research/bert 1、准备用于训练的数据集 此处准备的是BBC news的数据集&#xff0c;下载链接&…...

《Netty》从零开始学netty源码(五十二)之PoolThreadCache

PoolThreadCache Netty有一个大的公共内存容器PoolArena&#xff0c;用来管理从操作系统中获得的内存&#xff0c;在高并发下如果所有线程都去这个大容器获取内存它的压力是非常大的&#xff0c;所以Netty为每个线程建立了一个本地缓存&#xff0c;即PoolThreadCache&#xff…...

放弃40k月薪的程序员工作,选择公务员,我来分享一下看法

我有一个朋友&#xff0c;拒绝了我为他提供的4万薪水的工作&#xff0c;去了一个体制内的银行&#xff0c;做程序员&#xff0c;即使薪水减半。他之前在北京一家大公司做程序员&#xff0c;一个月30k。当我开始创业时&#xff0c;我拉他来和我一起干&#xff0c;但那时我们太小…...

【MybatisPlus】高级版可视化、可配置 自动生成代码

今天看别人使用了一个更加智能的生成代码工具&#xff0c;可视化、可配置策略&#xff0c;非常方便&#xff0c;配置一次&#xff0c;在哪都可以使用&#xff0c;也不会跟项目藕合下面简单说一下使用方式。 1、介绍mybatis-plus-generator-ui 主要是封装了mybatis-plus-gener…...

【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现

【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现 提示:最近开始在【图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现前言f-BRS模型运行环境安装1.下载源码并…...

2023/5/4总结

刷题&#xff1a; 第二周任务 - Virtual Judge (vjudge.net) 这一题用到了素筛,然后穷举即可 #include<stdio.h> #define Maxsize 500000 int a[Maxsize]; long long b[Maxsize]; long long max0; int sushu() {a[0]a[1]0;int i,j,k;for(i2,k0;i<Maxsize;i){if(a[i…...

php .net做网站哪个好/百度一下首页网址百度

一、加载过程 首先&#xff0c;我们需要搞清楚一个概念&#xff1a;我们在电脑上看到的 png 格式或者 jpg 格式的图片&#xff0c;png(jpg) 只是这张图片的容器&#xff0c;它们是经过相对应的压缩算法将原图每个像素点信息转换用另一种数据格式表示&#xff0c;以此达到压缩目…...

制作动画片的软件/哈尔滨百度关键词优化

仅供参考 1&#xff0c;js&#xff1a; onShareAppMessage(res) {return {title: 我在使用俺搜找客户&#xff0c;10万材料人都在用&#xff0c;就差你了,path: /pages/index,success: function(res) {// 转发成功console.log(res)},fail: function(res) {// 转发失败console.l…...

网站开发算是固定资产吗/今日广州新闻头条

Camtasia是一款专业的屏幕录制和软件&#xff0c;用户可以通过它来录制自己的电脑屏幕&#xff0c;包括实时动画、PPT播放&#xff0c;兼以音频录制、视频制作等功能&#xff0c;支持用户一站式完成屏幕录制和后期处理操作。 自软件发行以来&#xff0c;Camtasia每个版本都在不…...

如何做酒店网站设计/图床外链生成工具

1.前言 在自然语言处理领域&#xff0c;近几年最火的是什么&#xff1f;是BERT&#xff01;谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常出色的效果&#xff0c;堪称2018年深度学习领域最振奋人心的消息。而BERT算法又是基于Transformer&#xff0…...

织梦wordpress帝国对比/市场调研流程

大浪淘沙的AI创业圈&#xff0c;触景无限正在这个技术浪潮中不断找寻自己的位置。 有人说&#xff0c;AI创业的大门已经慢慢关闭&#xff0c;场内的玩家也已基本定型&#xff0c;未来的战争将聚焦在头部几家&#xff0c;马太效应的收紧会使得一大波竞逐者生存艰难&#xff0c;…...

网站ip pv/免费下载百度并安装

医嘱的查对与执行作为护理工作的基础和重点&#xff0c;要求护士熟悉掌握&#xff0c;我们一起看一下:一、医嘱查对制度(1)处理长期医嘱或临时医嘱时要记录处理时间&#xff0c;执行者签全名&#xff0c; 若有疑问必须问清楚后方可执行。各班医嘱均由当班护士两名进行查对。(2)…...