news 2026/9/2 12:26:12

SpringCloudAlibaba 基于Nacos Config的配置中心

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringCloudAlibaba 基于Nacos Config的配置中心

关于 Spring Cloud Config

Spring Cloud Config 用于跨多个应用程序和环境存储和提供分布式配置。 此配置存储理想地在Git版本控制下进行版本管理,并且可以在应用程序运行时进行修改。虽然它非常适合使用所有支持的配置文件格式以及Environment、PropertySource 或 @Value等结构的 Spring 应用程序,但它可以在运行任何编程语言的任何环境中使用。

Nacos

Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos常见的配置类型:
服务配置:数据库配置、缓存配置、消息队列配置
开关配置:功能开发、业务开关、服务开关
业务配置:模块A、模块B

Nacos 官网地址
https://nacos.io/docs/v2/quickstart/quick-start/
https://nacos.io/download/release-history/

Nacos四大功能

  1. 服务发现和服务健康检查
    Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。

  2. 动态配置管理
    动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需要,这使配置更改更加高效和灵活。

  3. 动态DNS服务
    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

  4. 服务和元数据管理
    Nacos提供易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes DNS,服务运行状况和指标统计。

Nacos Config 配置中心

官网 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

pom.xml

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2021.1</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.1</version> </dependency>

配置项参数

Nacos Config 配置项参数详解
https://www.cnblogs.com/ukzq/p/15952701.html

spring:cloud:nacos:discovery:# 服务注册地址server-addr:【ip:port nacos地址】group:【分组】namespace:【命名空间】 username:【nacos的用户名】 password:【nacos的密码】 config:# 配置中心地址server-addr:【ip:port nacos地址】# 配置文件格式file-extension:ymlgroup:【分组】 username:【nacos的用户名】 password:【nacos的密码】namespace:【命名空间】# 共享配置shared-configs:-data-id:【dataId】 refresh:trueconfig:import:-optional:nacos:【dataId】

refresh-enabled: false

refresh-enabled 是 Spring Cloud Alibaba Nacos 中用来控制 配置动态刷新 功能的总开关。

refresh-enabled: true(默认) → Nacos 配置变化时,应用会自动刷新 @Value 和 ConfigurationProperties 的值 refresh-enabled:false→ Nacos 配置变化时,应用不会刷新,必须重启才能生效#关闭或减少 Nacos 轮询日志logging: level: com.alibaba.nacos.client.config.impl.ClientWorker: WARN#效果:只打印错误和警告,不再打印 config changed 和 [polling-resp] 等 INFO 日志,不影响配置拉取功能

三 部署

Controller

@RefreshScope支持Nacos的动态刷新功能,实现配置自动更新。

@RefreshScope@RestControllerpublicclassNacosConfigClient{@Value("${config.info}")privateStringconfigInfo;@GetMapping("/config/info")publicObjectgetConfigInfo(){System.out.println("get config info: "+configInfo);returnconfigInfo;}}
启动类
@EnableDiscoveryClient @SpringBootApplication public class Consummer_8021_Application { public static void main(String[] args) { SpringApplication.run(Consummer_8021_Application.class); } }

Nacos配置

启动nacos

在CMD窗口 startup.cmd -m standalone

编辑配置

在 Nacos Spring Cloud 中,dataId 的完整格式:${prefix}-${spring.profiles.active}.${file-extension}

选择YAML配置

bootstrap.yml

bootstrap.yml 优先级高于application.yml

server: port: 8021 spring: application: name: nacosconfig cloud: nacos: server-addr: localhost:8848 config: file-extension: yml #指定yml格式的配置

在 application.yml

spring: profiles: active: dev

启动服务

请求接口,日志中可看到获取的信息

(完)

nacos的命名空间&组

配置文件 加载顺序

bootstrap.yml > application.yml > spring.application.name-profile.yml

如果多个yml文件出现同一属性,后加载的会覆盖先加载的(配置服务采用native方式时,此文件默认位于configServer的resources/config目录下)。

配置文件 application 和 bootstrap 的区别

applcation.yml是用户级资源配置,bootstrap.yml是系统级(优先级高); SpringCloud会创建一个"Bootstrap Context",作为Spring应用的"Application Context"的父上下文; 初始化的时候,Bootstrap Context负责从外部加载配置属性并解析配置; Bootstrap Context 与 Application Context共享一个从外部获取的Environment; Bootstrap Context有高优先级,默认情况下,不会被本地配置覆盖; Bootstrap Context 与 Application Context有着不同的约定,所以新增一个bootstrap.yml,保证Bootstrap Context 与 Application Context配置分离; bootstrap.yml 定义系统级别参数配置; 应用于: Spring Cloud Config 配置中心配置,加载外部配置中心的配置信息; 某些固定不被覆盖的属性; 某些加密/解密场景; application.yml 定义应用级别参数配置;应用于:SpringBoot项目配置。

Nacos共享配置(shared-configs)和扩展配(extension-config)

日常开发中,多个模块可能会有很多共用的配置,比如数据库连接信息,Redis 连接信息,RabbitMQ 连接信息,监控配置等等。那么此时,我们就希望可以加载多个配置,多个项目共享同一个配置之类等功能,Nacos Config 也确实支持。https://www.jianshu.com/p/8715072d3f4c

使用Nacos做为配置中心,需要注意配置文件加载优先级问题。

@RefreshScope @RestController public class NacosConfigController { @Value("${env.name}") private String envName; @Value("${ios_push_key}") private String ios_push_key; @Value("${ios_push_bundle_id}") private String ios_push_bundle_id; @Value("${ios_push_file}") private String ios_push_file; @Value("${email_smtp_host:}") private String email_smtp_host; //公共配置: email @Value("${constant_name:}") private String constant_name; //常量配置 @PostConstruct public void initConfig(){ log.info("init nacos config, envName: {}", envName); log.info("init nacos config, ios_push_key: {}", ios_push_key); log.info("init nacos config, ios_push_bundle_id: {}", ios_push_bundle_id); log.info("init nacos config, ios_push_file: {}", ios_push_file); log.info("init nacos common config, email_smtp_host: {}", email_smtp_host); log.info("init nacos constant config, constant_name: {}", constant_name); } @GetMapping("/nacosConfig") public void nacosConfig(){ log.info("init nacos config ... envName: {}", envName); } }

maven profiles 配置

<profiles> <profile> <id>prod</id> <properties> <env>prod</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <env>test</env> </properties> </profile> </profiles> <build> <resources> <resource> <directory>src/main/resources/profile/${env}</directory> </resource> </resources> </build>

nacos 基本使用及相关问题

403问题

这个问题是因为spring-cloud-starter-alibaba-nacos内置的nacos-client依赖版本太低,通过修改pom排除原来的nacos-client,引入更新的1.4.0+版本即可

在客户端指定namespace=public时,拿不到数据

解决:设置 namespace: 空 或注释掉 #namespace: public

修改登录密码

权限控制 > 用户管理

相关地址

Nacos服务配置中心-基础配置 https://www.jianshu.com/p/6aa313f5ce0c

Nacos 无法获取配置 https://blog.csdn.net/m0_57802508/article/details/125378118

Nacos无法实时刷新配置问题 https://blog.csdn.net/shinyolive/article/details/111402525

RefreshScope 刷新机制 https://blog.csdn.net/luqiang81191293/article/details/106678065

Nacos配置文件管理、微服务获取Nacos配置文件、热更新、配置共享、配置优先级等
https://blog.csdn.net/dayuiicghaid/article/details/126131768

其他
Spring Cloud 配置application.yml与bootstrap.yml
https://www.cnblogs.com/BlogNetSpace/p/16252618.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 12:24:23

PocketBase与HTMX组合:极简全栈Web开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 12:18:47

项目反应理论在AI安全评估中的应用:从题库优化到能力量化

1. 先搞清楚 IRT 在 AI 安全里到底解决什么问题如果你关注大模型的安全对齐、能力评估或者红队测试&#xff0c;可能会发现一个现象&#xff1a;我们经常用一堆问题去“考”模型&#xff0c;然后统计它的正确率或违规率。但这里有个关键问题被忽略了——我们用来测试的这些问题…

作者头像 李华
网站建设 2026/9/2 12:18:07

基于Stable Diffusion的AI角色剧情生成:本地部署与批量自动化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 12:17:00

【单片机毕设案例分享】基于 STM32 或 51 单片机的环境异常声光报警与外设联动系统设计 基于 ESP8266 的室内环境参数采集与移动端监控平台设计(024505)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机&#xff0c;STM32单片机&#xff0c;51单片机&#xff0c;J…

作者头像 李华
网站建设 2026/9/2 12:15:43

微信聊天记录怎么备份?WeChatMsg 完整使用教程

微信聊天记录怎么备份&#xff1f;WeChatMsg 完整使用教程 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

作者头像 李华