ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SpringCloudAlibaba 基于Nacos Config的配置中心

2026/9/2 12:26:29 拓冰建站 浏览量
SpringCloudAlibaba 基于Nacos Config的配置中心 关于 Spring Cloud ConfigSpring Cloud Config 用于跨多个应用程序和环境存储和提供分布式配置。 此配置存储理想地在Git版本控制下进行版本管理并且可以在应用程序运行时进行修改。虽然它非常适合使用所有支持的配置文件格式以及Environment、PropertySource 或 Value等结构的 Spring 应用程序但它可以在运行任何编程语言的任何环境中使用。NacosNacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos常见的配置类型服务配置数据库配置、缓存配置、消息队列配置开关配置功能开发、业务开关、服务开关业务配置模块A、模块BNacos 官网地址https://nacos.io/docs/v2/quickstart/quick-start/https://nacos.io/download/release-history/Nacos四大功能服务发现和服务健康检查Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查以防止向不健康的主机或服务实例发送请求。动态配置管理动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需要这使配置更改更加高效和灵活。动态DNS服务动态 DNS 服务支持权重路由让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现以帮助您消除耦合到厂商私有服务发现 API 上的风险。服务和元数据管理Nacos提供易于使用的服务仪表板可帮助您管理服务元数据配置kubernetes DNS服务运行状况和指标统计。Nacos Config 配置中心官网 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.htmlpom.xml通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-bootstrap/artifactId /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId version2021.1/version /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId version2021.1/version /dependency配置项参数Nacos Config 配置项参数详解https://www.cnblogs.com/ukzq/p/15952701.htmlspring: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: falserefresh-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 日志不影响配置拉取功能三 部署ControllerRefreshScope支持Nacos的动态刷新功能实现配置自动更新。RefreshScopeRestControllerpublicclassNacosConfigClient{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.ymlbootstrap.yml 优先级高于application.ymlserver: port: 8021 spring: application: name: nacosconfig cloud: nacos: server-addr: localhost:8848 config: file-extension: yml #指定yml格式的配置在 application.ymlspring: 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 idprod/id properties envprod/env /properties activation activeByDefaulttrue/activeByDefault /activation /profile profile idtest/id properties envtest/env /properties /profile /profiles build resources resource directorysrc/main/resources/profile/${env}/directory /resource /resources /buildnacos 基本使用及相关问题403问题这个问题是因为spring-cloud-starter-alibaba-nacos内置的nacos-client依赖版本太低通过修改pom排除原来的nacos-client引入更新的1.4.0版本即可在客户端指定namespacepublic时拿不到数据解决设置 namespace: 空 或注释掉 #namespace: public修改登录密码权限控制 用户管理相关地址Nacos服务配置中心-基础配置 https://www.jianshu.com/p/6aa313f5ce0cNacos 无法获取配置 https://blog.csdn.net/m0_57802508/article/details/125378118Nacos无法实时刷新配置问题 https://blog.csdn.net/shinyolive/article/details/111402525RefreshScope 刷新机制 https://blog.csdn.net/luqiang81191293/article/details/106678065Nacos配置文件管理、微服务获取Nacos配置文件、热更新、配置共享、配置优先级等https://blog.csdn.net/dayuiicghaid/article/details/126131768其他Spring Cloud 配置application.yml与bootstrap.ymlhttps://www.cnblogs.com/BlogNetSpace/p/16252618.html