SpringCloudAlibaba配置中心: nacos-config
创始人
2025-05-30 17:49:53

nacos-config配置中心

本项目代码与笔记已存放在Gitee仓库 地址: 代码,笔记

文章目录

  • nacos-config配置中心
    • 1.1 快速开始
    • 1.2 搭建nacos-config服务
    • 1.3 Config相关配置
      • 1.3.1 支持profile粒度的配置
      • 示例:
      • 1.3.2 支持命名空间分类配置(按环境规类)
      • 1.3.3 支持自定义 Group 的配置(按项目规类)
      • 1.3.4 支持自定义扩展的 Data Id 配置
      • 1.3.5 @RefreshScope

官方文档: https://github.com/alibaba/spring­cloud­alibaba/wiki/Nacos­config

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

1.维护性 2.时效性 3.安全性

springcloud config 对比

三大优势:

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

1.1 快速开始

点击加号新建配置

Namespace:代表不同环境,如开发、测试、生产环境。

Group:代表某项目,如XX医疗项目、XX电商项目

DataId:每个项目下往往有若干个工程(微服务),每个配置集(DataId)是一个工程(微服务)主配置文件

  • 比如新建一个公共订单配置,点击发布,就会出现在配置列表。

  • 还可以直接勾选配置点击克隆到其他命名空间(环境)

权限控制

  • 启动权限:如果需要使用权限配置,修改application.properties,使之生效

1.2 搭建nacos-config服务

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更

  • 先new一个module

new->module->Next->输入名字->finish

  • 新建启动类

    如果指定了namespace:public会有一个bug控制台一直打印ClientWorker

  • 新建配置类

  • 添加依赖

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config

  • 在启动类获取配置信息(在使用之前得先加上bootstrap.properties配置文件来配置Nacos Server地址)

/*** Create with IntelliT IDEA** @Author: zhengmingzhe* @Date: 2023/03/19/16:36* @Description: 配置中心服务启动类*/
@SpringBootApplication
public class ConfigApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);String orderName = applicationContext.getEnvironment().getProperty("order.name");String num = applicationContext.getEnvironment().getProperty("order.num");System.out.println("order name :" + orderName + "; num: " + num);}
}
  • 加上bootstrap.yml配置文件来配置Nacos Server地址
spring:application:name: config-nacoscloud:nacos:server-addr: 192.168.13.1:8848username: nacospassword: nacosconfig:namespace: public

注意如果在配置里改了权限开启为true就必须得配置nacos用户名密码

此时配置未生效控制台打印为null

2023-03-19 16:55:37.480  INFO 17536 --- [           main] c.a.nacos.client.config.impl.CacheData   : [fixed-192.168.13.1_8848-public] [add-listener] ok, tenant=public, dataId=config-nacos, group=DEFAULT_GROUP, cnt=1
order name :null; num: null

这是因为服务名必须得和nacos里面配置的dataId保持一致

spring:application:name: com.zmz.ordercloud:nacos:server-addr: 192.168.13.1:8848username: nacospassword: nacosconfig:namespace: public

这时配置就生效了,当然如果想服务名与dataId不一致就得手动指定dataId

控制台:[add-listener] ok, tenant=public, dataId=com.zmz.order, group=DEFAULT_GROUP, cnt=1
order name : 蔡徐坤; num:  21

1.3 Config相关配置

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是

DEFAULT_GROUP

支持配置的动态更新

@SpringBootApplication
public class ConfigApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);while(true){//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置String orderName = applicationContext.getEnvironment().getProperty("order.name");String num = applicationContext.getEnvironment().getProperty("order.num");System.out.println("order name :" + orderName + "; num: " + num);TimeUnit.SECONDS.sleep(1);}}
}

ps:除了默认的配置文件, 其他dataId都要加上后缀

Nacos客户端默认是Properties类型的配置如果想使用yml需要如下配置

spring:application:name: com.zmz.ordercloud:nacos:server-addr: 192.168.13.1:8848username: nacospassword: nacosconfig:namespace: publicfile-extension: yaml#   refresh-enabled: false   客户端将无法感知配置的变化#Nacos客户端默认是Properties类型的配置如果想使用yml需要 file-extension: yaml(只针对默认配置文件和profile格式配置文件,可以自定义配置文件)

1.3.1 支持profile粒度的配置

(不同的环境不同的配置文件比如application-dev.yml )

server:port: 8050
spring:profiles:active: dev

spring­cloud­starter­alibaba­nacos­config 在加载配置的时候,不仅仅加载了以 dataid 命名为 spring.application.name.{spring.application.name}.spring.application.name.{file-extension:properties} 为前缀的基础配置,还加载了dataid命名为 spring.application.name−{spring.application.name}-spring.application.name−{profile}.${file-extension:properties} 的基础配置**(除了默认的配置文件,其他配置文件必须写上后缀)**。在日常开发中如果遇到多套环境下的不 同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

但是只有默认配置文件(跟服务名相同的dataId的配置文件)可以使用profile粒度的配置

示例:

创建一个-dev的配置文件

这里会有一个配置文件生效的优先级(优先级大的会覆盖优先级小的并且互补),前提是去掉指定 file-extension: yaml配置文件后缀

profile>默认配置文件>自定义配置文件

1.3.2 支持命名空间分类配置(按环境规类)

支持自定义 namespace 的配置

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景 之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

直接修改config.namespace为指定的命名空间id就可以了

 spring.cloud.nacos.config.namespace=8f46651d-94f6-4697-8054-8bc25b815165

1.3.3 支持自定义 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= GROUP_ZMZ

1.3.4 支持自定义扩展的 Data Id 配置

Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置 集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命 名规则保证全局唯一性。此命名规则非强制。

  • 修改application测试
@SpringBootApplication
public class ConfigApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);String orderName = applicationContext.getEnvironment().getProperty("order.name");String num = applicationContext.getEnvironment().getProperty("order.num");String userConfig = applicationContext.getEnvironment().getProperty("user.config");System.out.println("order name :" + orderName + "; num: " + num);System.out.println("userConfig :" + userConfig);}
}
  • 修改yaml
spring:application:name: com.zmz.ordercloud:nacos:server-addr: 192.168.13.1:8848username: nacospassword: nacosconfig:namespace: public#        namespace: 8f46651d-94f6-4697-8054-8bc25b815165file-extension: yaml#   refresh-enabled: false   客户端将无法感知配置的变化group: DEFAULT_GROUPshared-configs:- data-id: com.zdy.common.propertiesrefresh: trueextension-configs:- data-id: com.extension.common.propertiesrefresh: true
#Nacos客户端默认是Properties类型的配置如果想使用yml需要 file-extension: yaml(只针对默认配置文件和profile格式配置文件,可以自定义配置文件)
#除了默认的配置文件,其他配置文件必须写上后缀
#profile>默认配置文件>自定义配置文件( extension-configs:>shared-configs,在下表越大优先级越大)

1.3.5 @RefreshScope

@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {@Value("${user.name}")public String userName;@RequestMapping("/show")public String show() {return userName;}
}

相关内容

热门资讯

【前端八股文】JavaScri... 文章目录Set概念与arr的比较属性和方法并集、交集、差集Map概念属性和方法String用索引值和...
海康硬盘录像机接入RTSP/o... EasyNVR安防视频云服务平台可支持设备通过RTSP/Onvif协议接入平台,能提供...
在混合劳动力时代如何避免网络安... 在混合劳动力时代如何避免安全网络风险 三年多来,混合工作一直是工作生活中不可或缺的一...
2023还不懂Jmeter接口... 这里介绍的Jmeter接口测试的的实战,如果文章内容没遇看懂的话,我这边...
基于4G/5G弱网聚合的多链路... 基于4G/5G多卡聚合(弱网聚合)的智能融合通信设备技术亮点 增强带宽提供可靠连接 通过将多个有线和...
如何使用Synplify综合v... 文章目录使用Synplify综合的好处synplify的教程方法1(无效)...
2023年全国最新高校辅导员精... 百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等ÿ...
2022年18个值得期待的Le... 有数百个独特的LearnDash附加组件,您可能很难选择您的LearnDash LMS...
【java基础】Stream流... 文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法fl...
javaweb高校行政办公自动... 本课题基于我国高校管理信息化建设现状,结合在实际工作中所遇到的问题和收获,...
一款专门为自动化测试打造的集成... 你好,我是不二。 随着行业内卷越来越严重,自动化测试已成为测试工程师的...
【go-zero】golang... 一、casbin 概览 1、casbin基本了解 casbin的GitHub:https://git...
现在开发低代码平台算晚吗? 现在开发低代码平台算晚吗?作为低代码的亲戚——零代码厂商,这篇就以“厂商...
【JavaWeb】书城项目(2... 222.书城项目-第三阶段:修改所有html页面为jsp页面 改成jsp页面之后&#x...
基于jeecgboot的大屏设...      通过前面设计好数据源后,就要进行数据集的设计了。      一、还是在onl...
Linux命令小技巧:显示文件... 工作中会有很多千奇百怪的需求,比如:如何在 Linux 命令行中快速找到...
【找工作】-- 大数据工程师找... 目录 1.前言 2.找工作的理论知识 2.1 分析个人特征 2.1.1 你自身优势是什么?
C++基础算法④——排序算法(... 排序算法 1.插入排序 2.桶排序 1.插入排序 基本思想:将初始数据分为有序部分和...
nginx快速入门.跟学B站n... nginx快速入门.跟学B站nginx一小时精讲课程笔记nginx简介及环境准备nginx简介环境准...
ORACLE存过互相调用之间事... 今天在问答区看到一个问题是 假如有procedureA、procedureB和procedureC&...
基于java中Springbo... 基于java中Springboot框影视影院订票选座管理系统 开发语言:Java 框...
CVE-2018-18086 最近闲来无事,看到青少年CTF平台,感觉对新手还是比较友好的࿰...
【深度学习】基于Hough变化... 💥💥💞💞欢迎来到本博客❤️❤️&#x...
AtCoder Beginne... D - Bank (atcoder.jp)         (1)题目大...
VxWorkds 内存管理(3... 虚拟内存管理 对于带MMU的目标板,VxWorks提供虚拟内存的支持,V...
【微服务】—— 统一网关Gat... 文章目录1. 概述1.1 为什么需要网关1.2 SpringCloud Gateway2. gate...
文心一言实际测试——让我们拿实... 文心一言实际测试——让我们拿实际说好坏 4月16日,文心一言闪亮登场,就...
Postgresql源码(10... 0 总结 (可以最后看) PLpgSQL_execstate中包含的两个...
网络技术与应用概论(上)——“... 各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是计算机网络的一些知...
Yolov5 QAT量化训练 1. QAT介绍 从 模型量化(5): 敏感层分析可以看出来,对于yolov5-nano模型,对最后...