Spring Cloud Alibaba全家桶(五)——微服务组件Nacos配置中心
前言

本文小新为大家带来 微服务组件Nacos配置中心 相关知识,具体内容包括Nacos Config快速开始指引,搭建nacos-config服务,Config相关配置,配置的优先级,@RefreshScope注解等进行详尽介绍~
不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者的路上,小新与大家共同成长!
📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)
↩️本文上接:Spring Cloud Alibaba全家桶(四)——微服务调用组件Feign
目录
文章标题
- 前言
- 目录
- 一、Nacos Config快速开始
- 二、搭建nacos-config服务
- 三、Config相关配置
- 四、配置的优先级
- 五、@RefreshScope
- 后记

Nacos配置中心官方文档: https://github.com/alibaba/springcloudalibaba/wiki/Nacosconfig
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

springcloud config 对比 三大优势:
- springcloud config大部分场景结合git 使用, 动态变更还需要依赖Spring Cloud Bus消息总线来通过所有的客户端变化;
- springcloud config不提供可视化界面;
- nacos config使用长轮询更新配置, 一旦配置有变动后,通知Provider的过程非常的迅速, 从速度上秒杀springcloud原来的config几条街。

一、Nacos Config快速开始
🍀(1)准备配置,nacos server中新建nacosconfig.properties


最佳实践:
- Namespace:代表不同环境,如开发、测试、生产环境。
- Group:代表某项目,如XX医疗项目、XX电商项目
- DataId:每个项目下往往有若干个工程(微服务),每个配置集(DataId)是一个工程(微服务)的主配置文件

🍀(2)启动权限:修改application.properties

二、搭建nacos-config服务
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
🍀(1)引入依赖
1 <dependency>
2 <groupId>com.alibaba.cloud</groupId>
3 <artifactId>spring‐cloud‐starter‐alibaba‐nacos‐config</artifactId>
4 </dependency>
🍀(2)添加bootstrap.properties
1 spring.application.name=nacos‐config
2 # 配置中心地址
3 spring.cloud.nacos.config.server‐addr=127.0.0.1:8848
4
5 # dataid 为 yaml 的文件扩展名配置方式
6 # `${spring.application.name}.${file‐extension:properties}`
7 spring.cloud.nacos.config.file‐extension=yaml
8 #profile粒度的配置 `${spring.application.name}‐${profile}.${file‐extension:properties}` 9 spring.profiles.active=prod
🍀(3)启动服务,测试微服务是否使用配置中心的配置
@SpringBootApplication
public class NacosConfigApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args); String userName = applicationContext.getEnvironment().getProperty("common.name");String userAge = applicationContext.getEnvironment().getProperty("common.age"); System.out.println("common name :"+userName+"; age: "+userAge);}
}

三、Config相关配置
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP
🍀(1)支持配置的动态更新
@SpringBootApplication
public class NacosConfigApplication {public static void main(String[] args) throws InterruptedException {ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);while(true) {//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置String userName = applicationContext.getEnvironment().getProperty("common.name");String userAge = applicationContext.getEnvironment().getProperty("common.age");System.err.println("common name :" + userName + "; age: " + userAge); TimeUnit.SECONDS.sleep(1);}}
}
ps:除了默认的配置文件, 其他dataId都要加上后缀
🍀(2)支持profile粒度的配置
springcloudstarteralibabanacosconfig 在加载配置的时候,不仅仅加载了以 dataid 为
${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了dataid为
${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。
spring.profiles.active=dev
profile 的配置文件 大于 默认配置的文件, 并且形成互补。
ps:只有默认的配置文件, 才会应用profile。
🍀(3)支持自定义 namespace 的配置
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个 namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:
spring.cloud.nacos.config.namespace=71bb9785‐231f‐4eca‐b4dc‐6be446e12ff8
🍀(4)支持自定义 Group 的配置
Group是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认是DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:
spring.cloud.nacos.config.group=DEVELOP_GROUP
🍀(5)支持自定义扩展的 Data Id 配置
Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
# 自定义 Data Id 的配置
# 不同工程的通用配置 支持共享的 DataId
spring.cloud.nacos.config.sharedConfigs[0].data‐id= common.yaml
spring.cloud.nacos.config.sharedConfigs[0].group=REFRESH_GROUP
spring.cloud.nacos.config.sharedConfigs[0].refresh=true# config external configuration
# 支持一个应用多个 DataId 的配置 一定要加扩展名
spring.cloud.nacos.config.extensionConfigs[0].data‐id=ext‐config‐common01.properties
spring.cloud.nacos.config.extensionConfigs[0].group=REFRESH_GROUP
spring.cloud.nacos.config.extensionConfigs[0].refresh=truespring.cloud.nacos.config.extensionConfigs[1].data‐id=ext‐config‐common02.properties
spring.cloud.nacos.config.extensionConfigs[1].group=REFRESH_GROUP
spring.cloud.nacos.config.extensionConfigs[1].refresh=true
四、配置的优先级
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置:
- A: 通过 spring.cloud.nacos.config.shared-configs 支持多个共享 Data Id 的配置
- B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
- C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置当三种方式共同使用时,他们的一个优先级关系是:A < B < C 优先级从高到低:
-
- nacosconfigproduct.yaml 精准配置
-
- nacosconfig.yaml 同工程不同环境的通用配置
-
- extconfig: 不同工程 扩展配置
-
- shareddataids 不同工程通用配置
-
五、@RefreshScope
@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解。
@RestController
@RefreshScope
public class TestController{@Value("${common.age}")private String age;@GetMapping("/common")public String hello() {return age;}
}
后记

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
相关文章:
Spring Cloud Alibaba全家桶(五)——微服务组件Nacos配置中心
前言 本文小新为大家带来 微服务组件Nacos配置中心 相关知识,具体内容包括Nacos Config快速开始指引,搭建nacos-config服务,Config相关配置,配置的优先级,RefreshScope注解等进行详尽介绍~ 不积跬步,无以至…...
【微信小程序】-- 页面事件 - 下拉刷新(二十五)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
springboot启动过程加载数据笔记(springboot3)
SpringApplication AbstractApplicationContext PostProcessorRegistrationDelegate ConfigurationClassPostProcessor ConfigurationClassParser 一堆循环和调用 ComponentScanAnnotationParser扫描 processConfigurationClass.doProcessConfigurationClass(configClass, so…...
中文代码86
PK 嘚釦 docProps/PK 嘚釦諿A眎 { docProps/app.xml漅薾?糤?D?v拢W4揣狤"攃e9 睔貣m*:PAz韒g?项弇}R珁湧4嶱 ]I禑菦?櫮戵\U佳 珩 ]铒e礎??X(7弅锿?jl筀儸偛佣??z窊梈ZT炰攷 ?\ 銒沆?状尧绥>蕮 ?斬殕{do]?o乗YX?:??罢秗,泿)怟 …...
网络参考模型
OSI参考模型 应用层 不服务于任何其他层,就是位APP提供相应的服务,不如HTTP、域名解析DNS提供服务表示层 1.使得应用数据能够被不同的系统(Windows\Linux)进行识别和理解 2.数据的解码和编码、数据的加密与解密、数据的压缩和解…...
Spark Tungsten
Spark Tungsten数据结构Unsafe Row内存页管理全阶段代码生成火山迭代模型WSCG运行时动态生成Tungsten (钨丝计划) : 围绕内核引擎的改进: 数据结构设计全阶段代码生成(WSCG,Whole Stage Code Generation) 数据结构 Tungsten 在…...
2023年总结的web前端学习路线分享(学习导读)
如果你打开了这篇文章,说明你是有兴趣想了解前端的这个行业的,以下是博主2023年总结的一些web前端的学习分享路线,如果你也想从事前端或者有这方面的想法的,请接着往下看! 前端发展前景 前端入门 巩固基础 前端工程…...
MyBatis学习笔记(十) —— 动态SQL
10、动态SQL MyBatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串的痛点问题。 动态SQL: 1、if 标签:通过test属性中的表达式判断标签中的内容是否有效(是否会拼接到sql中…...
剑指 Offer 55 - II. 平衡二叉树
剑指 Offer 55 - II. 平衡二叉树 难度:easy\color{Green}{easy}easy 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 示例 1: 给定二叉树 […...
一文吃透前端低代码的 “神仙生活”
今天来说说前端低代码有多幸福? 低代码是啥?顾名思义少写代码…… 这种情况下带来的幸福有:代码写得少,bug也就越少(所谓“少做少错”),因此开发环节的两大支柱性工作“赶需求”和“修bug”就…...
【深度学习】预训练语言模型-BERT
1.BERT简介 BERT是一种预训练语言模型(pre-trained language model, PLM),其全称是Bidirectional Encoder Representations from Transformers。下面从语言模型和预训练开始展开对预训练语言模型BERT的介绍。 1-1 语言模型 语言模型 …...
C++类的组合
C类的组合什么是类的组合初始化参数列表使用类的组合案例分析组合构造和析构顺序问题this指针基本用法和作用什么是类的组合 类的组合就是以另一个对象为数据成员,这种情况称为类的组合 1.优先使用类的组合,而不是继承 2.组合表达式的含义 一部分关系 初…...
2.伪随机数生成器(ctr_drbg)的配置与使用
零、随机数应用 生成盐,用于基于口令的密码 生成密钥,用于加密和认证 生成一次性整数Nonce,防止重放攻击 生成初始化向量IV 构成 种子,真随机数生成器的种子来源于物理现象 内部状态,种子用来初始化内部状态 一、真随机数和伪随机数 1.区别 随机数在安全技术中通常被用于…...
CentOS7 切换图形模式和多用户命令行模式
备注: 主机名 hw 含义:hardware 缩写,意思是硬件(物理机) 文章目录1、查看源头2、查看当前系统运行模式3、设置系统运行模式为多用户命令行模式4、查看当前系统运行模式5、重启系统6、确认当前系统运行模式7、设置系统…...
在linux上用SDKMan对Java进行多版本管理
在linux上用SDKMan对Java进行多版本管理 有一个工具叫SDKMan,它允许我们这样做。官方网站这样描述: TIP: "SDKMan 是一个工具,用于在大多数基于Unix的系统上管理多个软件开发工具包的并行版本。它提供了一个方便的命令行接口(CLI)和API,…...
JSONObject、fastJson(JsonObject)、Gson(JsonObject)区别
概述 Java中并没有内置的 JSON 解析,需要使用第三方类库 fastJson :阿里巴巴的JSON 库,优势在于解析速度快,解析效率高,可以轻松处理大量的 JSON 数据JackSon : 社区十分活跃,spring框架默认使…...
如何在CSDN中使用ChatGPT
本篇文章致力于帮助大家理解和使用ChatGPT(现在CSDN改成”C知道“了)。简介ChatGPT是OpenAI公司开发的一种大型语言模型。它是一种基于Transformer架构的深度学习模型,可以对语言进行建模和生成。它可以处理问答、对话生成、文本生成等多种任…...
【Spring6】| GoF之工厂模式
目录 一:GoF之工厂模式 1. 工厂模式的三种形态 2. 简单工厂模式 3. 工厂方法模式 4. 抽象工厂模式(了解) 一:GoF之工厂模式 (1)GoF(Gang of Four),中文名——四人组…...
初识Node.js
文章目录初识Node.jsNode.js简介fs模块演示路径问题path路径模块http模块创建web服务器得基本步骤req请求对象res响应对象解决中文乱码问题模块化的基本慨念1、模块化2、Node.js中模块的分类3、Node.js中的模块作用域3.1什么是模块作用域4、向外共享模块作用域中的成员4.1modul…...
C51---软件消抖
1.example #include "reg52.h" #include "intrins.h" //main.c(11): error C264: intrinsic _nop_: declaration/activation error,添加这个头文件就可了 sbit led1 P3^7;//引脚位置,根据原理图可知 sbit key1 P2^1; sbit key2 P2^0; void …...
RxDataSources编辑功能详解:如何实现TableView的增删改操作
RxDataSources编辑功能详解:如何实现TableView的增删改操作 【免费下载链接】RxDataSources UITableView and UICollectionView Data Sources for RxSwift (sections, animated updates, editing ...) 项目地址: https://gitcode.com/gh_mirrors/rx/RxDataSources…...
Clover Bootloader虚拟化环境部署终极指南:QEMU、KVM、Xen全平台支持
Clover Bootloader虚拟化环境部署终极指南:QEMU、KVM、Xen全平台支持 【免费下载链接】CloverBootloader Bootloader for macOS, Windows and Linux in UEFI and in legacy mode 项目地址: https://gitcode.com/gh_mirrors/cl/CloverBootloader Clover Bootl…...
OpenClaw技能市场探索:GLM-4.7-Flash加持的10个实用插件
OpenClaw技能市场探索:GLM-4.7-Flash加持的10个实用插件 1. 为什么需要关注OpenClaw技能市场? 当我第一次接触OpenClaw时,最让我惊喜的不是它的基础功能,而是它丰富的技能市场生态。作为一个长期使用各类自动化工具的技术爱好者…...
如何实现百度网盘下载加速?KinhDown让大文件传输效率倍增
如何实现百度网盘下载加速?KinhDown让大文件传输效率倍增 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在忍受百度网盘的龟速下载吗?当你急需工作文件却被限制在几十KB/s的速度时,当重…...
别再死记硬背!用Python(SymPy库)自动推导DC-DC变换器的小信号模型
用Python解放双手:SymPy自动推导DC-DC变换器小信号模型的工程实践 当电源工程师面对Buck、Boost电路的小信号模型推导时,那些繁琐的矩阵运算和拉普拉斯变换是否让你头疼不已?传统手工推导不仅耗时费力,还容易在代数运算中出错。本…...
一文搞懂 Spring Cloud:从入门到实战的微服务全景指南(建议收藏)
如果你正在做后端开发,或者正在准备找实习/秋招,那你一定绕不开一个关键词:微服务。 而在 Java 技术栈中,微服务的“标配方案”,就是今天的主角——Spring Cloud。 很多同学第一次接触 Spring Cloud 时,都…...
Umi-OCR:重新定义离线文字识别的全场景解决方案
Umi-OCR:重新定义离线文字识别的全场景解决方案 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_Tre…...
告别电台收听难题:foobox-cn网络电台收听方案
告别电台收听难题:foobox-cn网络电台收听方案 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn作为foobar2000的DUI皮肤(桌面用户界面定制方案)࿰…...
手把手教你解决MMLab中ImportError: cannot import name ‘set_random_seed‘错误
深度解析MMLab中set_random_seed导入错误的本质与系统化解决方案 当你第一次在MMLab生态中遇到ImportError: cannot import name set_random_seed from mmdet.apis这个错误时,可能会感到困惑和沮丧。这个看似简单的导入错误背后,实际上反映了开源计算机视…...
告别手动拖拽!用.men和.tbr文件在UG NX里一键创建专属菜单栏(附完整脚本模板)
告别手动拖拽!用.men和.tbr文件在UG NX里一键创建专属菜单栏(附完整脚本模板) 在UG NX的二次开发中,手动拖拽按钮和菜单不仅效率低下,还容易出错。想象一下,每次部署新功能都要重复点击几十次鼠标ÿ…...
