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

【微服务】Nacos配置管理

🚩本文已收录至专栏:微服务探索之旅
👍希望您能有所收获
Nacos除了可以做配置管理,同样可以当作注册中心来使用。

了解注册中心用法点击跳转👉【微服务】Nacos注册中心

一.引入

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

  • 由此我们可以引入Nacos用于统一的配置管理:
    • 一方面可以用于将配置集中管理。
    • 另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
      在这里插入图片描述

二.统一配置管理

(1) 在nacos中添加配置文件

如何在nacos中管理配置呢?

1.点击右侧配置列表

在这里插入图片描述

  1. 在弹出的表单中,填写配置信息:

在这里插入图片描述

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

(2) 在微服务拉取配置

(2.1) 前言

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

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

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

(2.2) 引入依赖

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

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

注意:如果未在工程中统一管理依赖版本,此处需要指定具体版本

(2.3) 新建bootstrap.yaml

在user-service中添加一个bootstrap.yaml文件,内容如下:

spring:application:name: userservice # 服务名称profiles:active: dev # 开发环境,这里是dev cloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后缀名

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

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

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

在这里插入图片描述

(2.4) 测试

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

在这里插入图片描述

完整代码:

package cn.itcast.user.web;import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Value("${pattern.dateformat}")private String dateformat;@GetMapping("now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}// ...略
}

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

在这里插入图片描述

说明已经成功读取到了我们在nacos中配置的日期格式。

三.配置热更新

(1) 引入

我们的目的之一是当我们修改nacos中的配置后,无需重启微服务即可让配置即可生效,也就是配置热更新

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

(2) 方式一

在@Value注入的变量所在类上添加注解@RefreshScope
在这里插入图片描述

(3) 方式二

使用@ConfigurationProperties注解代替@Value注解。

  1. 在user-service微服务中,新建一个类,读取nacos中配置的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;
}
  1. 在UserController中使用这个读取配置类代替@Value直接注入:

在这里插入图片描述

(4) 测试

修改nacos中配置后直接刷新网页后可以看到服务已经成功读取到修改后的配置~

在这里插入图片描述

四.配置共享

(1) 前言

在微服务启动时,会去nacos按顺序读取多个配置文件,例如:

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

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,每种环境都会去读取,因此可以被多个环境共享。

(2) 使用

(2.1) 添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:
在这里插入图片描述

(2.2) 读取共享配置

  1. 在user-service服务中,修改PatternProperties类,读取新添加的属性:

在这里插入图片描述

  1. 在user-service服务中,修改UserController,添加一个方法:
    在这里插入图片描述

  2. 运行两个UserApplication,修改UserApplication2这个启动项,改变其profile值:
    在这里插入图片描述

在这里插入图片描述

UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

  1. 启动UserApplication和UserApplication2

访问http://localhost:8081/user/prop,结果:
在这里插入图片描述

访问http://localhost:8082/user/prop,结果:
在这里插入图片描述

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

(3) 配置共享的优先级

当nacos、服务本地同时出现相同配置属性时,优先级有高低之分:
在这里插入图片描述

相关文章:

【微服务】Nacos配置管理

&#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 Nacos除了可以做配置管理&#xff0c;同样可以当作注册中心来使用。 了解注册中心用法点击跳转&#x1f449;【微服务】Nacos注册中心 一.引入 当微服务部署的实例越来越多&#xff0…...

【C++】类与对象理解和学习(上)

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;类是什么&#xff1f;类是对对象进行描述的&#xff0c;是一个模型一样的东西&#xff0c;限定了类有哪些成员&#xff0c;定义出一个类并没有分配实际的内存空间来存储它&#xff08;实例化后才…...

Pyqt5小案例,界面与逻辑分离的小计算器程序

直接看下最终效果&#xff1a; 使用技术总结 使用Designer设计界面 使用pyuic5命令导出到python文件 新建逻辑处理文件&#xff0c;继承pyuic5导出的文件的类&#xff0c;在里面编写信号与槽的处理逻辑 使用Designer设计界面 要使用Designer&#xff0c;安装一个Python库即…...

leaflet加载KML文件,显示图形(方法2)

第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…...

Mysql 部署 MGR 集群

0. 参考文章 官方文档&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客&#xff1a; MGR 单主模式部署教程&#xff08;基于 MySQL 8.0.28&#xff09; - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…...

迁移至其他美国主机商时需要考虑的因素

网站的可访问性是关系业务的关键因素之一。一个稳定、快速且优化良好的主机上的网站更有可能享受不间断的流量&#xff0c;并在谷歌的SERP中获得更好的排名。因此&#xff0c;在构建企业网站时&#xff0c;选择合适的主机商相当重要。不过就以美国主机为例&#xff0c;由于每个…...

【数据结构】第二章 线性表

文章目录第二章 知识体系2.1 线性表的定义和基本操作2.1.1 线性表的定义2.1.2 线性表的基本操作2.2 线性表的顺序表示2.2.1 顺序表的定义2.2.2 顺序表的基本操作的实现2.3 线性表的链式表示2.3.1 单链表的定义2.3.2 单链表的基本操作实现2.3.3 双链表2.3.4 循环链表2.3.5 静态链…...

RESTful API 为何成为顶流 API 架构风格?

作者孙毅&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer 万物互联的世界充满着各式各样的 API &#xff0c;如何统筹规范 API 至关重要。RESTful API 是目前世界上最流行的 API 架构风格之一&#xff0c;它可以帮助你实现客户端与服务端关注点分离&#x…...

Python基础知识点汇总(列表)

列表的含义 列表由一系列按特定顺序排列的元素组成,是Python中内置的可变序列。 **注:**列表的所有元素放在中括号[]中,相邻的两个元素用逗号分隔; 可将整数、实数、字符串、列表、元组等任何类型的内容放到列表中,且同一列表的元素类型可以不同。 列表的创建和删除 1.…...

新的一年软件测试行业的趋势能够更好?

如果说&#xff0c;2022年对于全世界来说&#xff0c;都是一场极大的挑战的话&#xff1b;那么&#xff0c;2023年绝对是机遇多多的一年。众所周知&#xff0c;随着疫情在全球范围内逐步得到控制&#xff0c;无论是国际还是国内的环境&#xff0c;都会呈现逐步回升的趋势&#…...

Threejs中的Shadow Mapping(阴影贴图)

简而言之&#xff0c;步骤如下&#xff1a; 1.从灯光位置视点&#xff08;阴影相机&#xff09;创建深度图。 2.从相机的位置角度进行屏幕渲染&#xff0c;在每个像素点&#xff0c;比较由阴影相机的MVP矩阵计算的深度值和深度图的值的大小&#xff0c;如果深度图值小的话&…...

本质安全设备标准(IEC60079-11)的理解(四)

本质安全设备标准&#xff08;IEC60079-11&#xff09;的理解&#xff08;四&#xff09; 对于标准中“Separation”的理解 IEC60079-11使用了较长的篇幅来说明设计中需要考虑到的各种间距&#xff0c; 这也从一定程度上说明了间距比较重要&#xff0c;在设计中是需要认真考虑…...

(record)QEMU安装最小linux系统——TinyCore(命令行版)

文章目录QEMU安装最小linux系统——TinyCore参考QEMU使用qemu创建tinycore虚拟机再次启动文件保存QEMU安装最小linux系统——TinyCore 简单记录安装过程和记录点 参考 [原创] qemu 与 Tiny Core tinycore的探索 QEMU qemu不多介绍&#xff0c;这里是在WSL2上安装的linux版…...

C++中的cast类型转换

reinterpret_cast用法&#xff1a;reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数&#xff0c;也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果…...

西瓜数据集读取的详细解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

Mac开发环境配置

一、mac 安装homebrew 1. 必要性 ​ homebrew可以通过bash命令快速安装配置开发环境&#xff0c;并且在大多数情况下可以实现环境的自动配置。&#xff08;一键安装配置&#xff09; 2. 收益 ​ 节省开发环境工具配置时间&#xff0c;提高人效。 3. 安装步骤 打开mac终端…...

概率论面试题1:玫瑰花

概率论面试题 1. 一个活动&#xff0c;n个女生手里拿着长短不一的玫瑰花&#xff0c;无序的排成一排&#xff0c;一个男生从头走到尾&#xff0c;试图拿更长的玫瑰花&#xff0c;一旦拿了一朵就不能再拿其他的&#xff0c;错过了就不能回头&#xff0c;问最好的策略&#xff1…...

【DGL】图分类

目录概述数据集定义Data LoaderDGL中的batched graph定义模型训练参考概述 除了节点级别的问题——节点分类、边级别的问题——链接预测之外&#xff0c;还有整个图级别的问题——图分类。经过聚合、传递消息得到节点和边的新的表征后&#xff0c;映射得到整个图的表征。 数据…...

时间复杂度的计算(2023-02-10)

时间复杂度的计算 时间复杂度的计算分为三大类&#xff1a;一层循环、二层循环和多层循环。 一层循环 1.找出循环趟数t及每轮循环i的变化值 2.确立循环停止的条件 3.得出t与i之间的关系 4.联立两式&#xff0c;得出结果 eg: void fun(int n) {int i0;while (i*i*i<n)i;…...

测试开发之Django实战示例 第六章 追踪用户行为

第六章 追踪用户行为在之前的章节里完成了小书签将外站图片保存至本站的功能&#xff0c;并且实现了通过jQuery发送AJAX请求&#xff0c;让用户可以对图片进行喜欢/不喜欢操作。这一章将学习如何创建一个用户关注系统和创建用户行为流数据&#xff0c;还将学习Django的信号框架…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...