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

Nacos配置中心动态刷新全解析:从基础配置到源码级调优(二)

二、基础实战:Nacos动态刷新核心配置(从0到1搭建)

本节将从“环境准备-基础配置-动态刷新验证”三个步骤,带大家从零搭建Nacos动态刷新环境,掌握最核心的配置技巧。无论你是新手还是有一定经验的开发者,都建议按步骤实践,夯实基础。

2.1 环境准备:Nacos服务端与客户端搭建

动态刷新依赖Nacos服务端和客户端的正常通信,首先需要完成两端的环境搭建。

2.1.1 Nacos服务端部署(Windows/Linux通用)

推荐使用2.0.3版本(稳定版),部署步骤如下:

  1. 下载安装包:从Nacos官网(https://github.com/alibaba/nacos/releases)下载nacos-server-2.0.3.zip;

  2. 解压安装包:Windows下直接解压,Linux下执行unzip nacos-server-2.0.3.zip

  3. 切换数据库(生产环境必备)
    创建MySQL数据库(建议名称nacos_config),执行安装包中conf目录下的nacos-mysql.sql脚本,初始化表结构;

  4. 修改conf/application.properties文件,添加MySQL配置:
    `### 数据源配置
    spring.datasource.platform=mysql

数据库实例数量

db.num=1

数据库连接信息

db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root123`

  1. 启动Nacos服务端
    Windows:进入bin目录,双击startup.cmd(单机模式);

  2. Linux:进入bin目录,执行sh startup.sh -m standalone(单机模式,生产环境需用集群模式)。

  3. 验证启动成功:访问http://localhost:8848/nacos,使用默认账号密码nacos/nacos登录,能正常进入控制台则启动成功。

2.1.2 客户端项目搭建(SpringCloud Alibaba集成)

创建一个SpringBoot项目,集成SpringCloud Alibaba和Nacos Config,步骤如下:

(1)添加依赖(pom.xml)

核心依赖包括SpringBoot、SpringCloud Alibaba Nacos Config,注意版本对应关系(Spring Boot 2.6.11对应Spring Cloud Alibaba 2021.0.4.0):


<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
(2)创建配置文件(bootstrap.yml)

注意:Nacos Config的核心配置必须放在bootstrap.yml(或bootstrap.properties)中,而非application.yml。因为bootstrap.yml的加载优先级高于application.yml,会在服务启动早期加载,确保Nacos配置能正常拉取。

基础配置内容如下:


### 服务名称(对应Nacos Data ID的前缀)
spring:application:name: user-service### 激活的环境(对应Data ID的中间部分)profiles:active: dev### Nacos Config核心配置cloud:nacos:config:### Nacos服务端地址server-addr: localhost:8848### 配置文件格式(yaml/properties,对应Data ID的后缀)file-extension: yaml### 命名空间ID(环境隔离,dev环境的Namespace ID,需在Nacos控制台创建)namespace: 7536c865-497b-42e8-991a-75e3a6000a01### 配置分组(业务隔离,默认DEFAULT_GROUP)group: USER_GROUP### 用户名密码(若Nacos开启权限认证,需配置)username: nacospassword: nacos### 开启动态刷新(默认开启,可省略)refresh-enabled: true### 暴露监控端点(用于查看配置信息,可选)
management:endpoints:web:exposure:include: '*'endpoint:health:show-details: always
(3)创建启动类

创建UserServiceApplication.java,作为服务启动入口:


package com.example.userservice;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class UserServiceApplication {public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}

2.2 核心配置:实现动态刷新的关键步骤

完成环境搭建后,需要在Nacos控制台创建对应配置,并在客户端项目中通过注解开启动态刷新。本节将分“Nacos控制台配置创建”和“客户端动态刷新配置”两部分讲解。

2.2.1 Nacos控制台创建配置

根据bootstrap.yml中的配置,在Nacos控制台创建对应的配置集,步骤如下:

  1. 创建命名空间:登录Nacos控制台 → 左侧菜单栏“命名空间” → 点击“新建命名空间”,输入名称“dev”,描述“开发环境”,创建后记录命名空间ID(需与bootstrap.yml中的namespace配置一致);

  2. 切换命名空间:在控制台顶部选择刚创建的“dev”命名空间;

  3. 创建配置集:左侧菜单栏“配置管理”→“配置列表”→点击“+”号,输入以下信息:
    Data ID:user-service-dev.yaml(严格按照“服务名-环境-格式”命名,与bootstrap.yml对应);

  4. Group:USER_GROUP(与bootstrap.yml中的group配置一致);

  5. 配置格式:YAML;

  6. 配置内容:
    `### 服务端口
    server:
    port: 8081

自定义配置(用于测试动态刷新)

user:
name: 张三
age: 25
desc: 初始配置
enabled: true

新增复杂配置项(用于@ConfigurationProperties测试)

address:
province: 广东省
city: 深圳市
hobbies: [篮球, 编程, 阅读]`

  1. 发布配置:点击“发布”按钮,完成配置创建。

2.2.2 客户端动态刷新配置(两种核心方式)

Nacos动态刷新在客户端有两种实现方式:@Value注解+@RefreshScope注解(简单场景)、@ConfigurationProperties注解(复杂配置类场景)。两种方式覆盖了90%以上的实战场景,必须熟练掌握。

方式一:@Value + @RefreshScope(简单配置场景)

适用于单个或少量配置项的动态刷新,核心是在需要刷新的类上添加@RefreshScope注解,在配置项上添加@Value注解。

(1)创建测试接口

创建UserController.java,用于测试配置动态刷新:


package com.example.userservice.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 测试Nacos动态刷新控制器*/
@RestController
@RequestMapping("/user")
@RefreshScope // 关键:开启当前类的配置动态刷新
public class UserController {// 注入Nacos中的配置项@Value("${user.name}")private String userName;@Value("${user.age}")private Integer userAge;@Value("${user.desc}")private String userDesc;@Value("${user.enabled:false}") // 冒号后为默认值,若配置不存在则使用默认值private Boolean userEnabled;/*** 测试配置动态刷新接口(@Value方式)*/@GetMapping("/config/value")public String getUserConfigByValue() {return String.format("【@Value方式】用户名:%s,年龄:%d,描述:%s,是否启用:%b",userName, userAge, userDesc, userEnabled);}
}
(2)验证动态刷新

按照以下步骤验证配置是否能动态刷新:

  1. 启动服务:运行UserServiceApplication.java,启动服务;

  2. 访问测试接口:浏览器访问http://localhost:8081/user/config/value,返回结果:
    【@Value方式】用户名:张三,年龄:25,描述:初始配置,是否启用:true说明配置已成功从Nacos拉取并加载;

  3. 修改Nacos配置:登录Nacos控制台,进入dev命名空间,找到user-service-dev.yaml配置,修改配置内容:
    user: name: 李四 age: 30 desc: 动态修改后的配置 enabled: false address: province: 广东省 city: 广州市 hobbies: [足球, 音乐, 旅行]点击“发布”按钮,此时服务端控制台会打印配置变更日志(如“Received config change event from Nacos”);

  4. 再次访问接口:无需重启服务,直接刷新浏览器,返回结果:
    【@Value方式】用户名:李四,年龄:30,描述:动态修改后的配置,是否启用:false说明配置已动态刷新生效!

(3)关键注意事项
  • @RefreshScope注解必须添加在需要刷新的类上(如Controller、Service),而非启动类上,否则无法实现局部刷新;

  • 添加@RefreshScope注解后,该类会被Spring动态代理,每次配置刷新后会创建新的实例,因此类中若有状态变量(如静态变量、缓存数据),需注意线程安全。例如:若Controller中存在private int count = 0;,每次刷新后count会重置为0;

  • @Value注解支持默认值(格式:@Value("${key:defaultValue}")),当Nacos中没有对应配置时,会使用默认值,避免服务启动失败。例如@Value("${user.gender:male}"),若Nacos无user.gender配置,会默认注入male;

  • 若配置项不存在且未指定默认值,服务启动时会抛出IllegalArgumentException: Could not resolve placeholder 'key' in value "${key}"异常,需提前做好配置校验。

http://www.dtcms.com/a/535897.html

相关文章:

  • Excel小技巧:Excel数据带有单位应该如何运算求和?
  • 相机外参初始估计
  • Excel 学习笔记
  • 网站地图模板一站式网络营销
  • 如何检查开源CMS的数据库连接问题?
  • VTK入门:vtkQuadraticHexahedron——会“弯曲”的高精度六面体
  • 基于python大数据的城市扬尘数宇化监控系统的设计与开发
  • MCU定点计算深度解析:原理、技巧与实现
  • 【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 28 章 WIFI 实验-UDP 通信
  • 【C++ string 类实战指南】:从接口用法到 OJ 解题的全方位解析
  • 门户网站 建设 如何写公司名称变更网上核名怎么弄
  • 并发编程基础
  • 第六部分:VTK进阶(第174章 空间流式与增量处理)
  • 智谱GLM-4.6/4.5深度解析:ARC三位一体的技术革命与国产模型崛起
  • 221. Java 函数式编程风格 - 从命令式风格到函数式风格:计算文件中包含指定单词的行数
  • Linux操作系统-进程的“夺舍”:程序替换如何清空内存、注入新魂?
  • 基于微信小程序的奶茶店点餐平台【2026最新】
  • 微信小程序-智慧社区项目开发完整技术文档(中)
  • 做设计用什么软件seo优化排名价格
  • 《算法通关指南数据结构和算法篇(3)--- 栈和stack》
  • 如何建设诗词网站盘县网站开发
  • 空间数据采集与管理丨在 ArcGIS Pro 中利用模型构建器批处理多维数据
  • 【数据结构】大话单链表
  • Volta 管理 Node.js 工具链指南
  • 《HTTP 中的“握手”:从 TCP 到 TLS 的安全通信之旅》
  • 计算机网络6
  • 信息咨询公司网站源码深圳白狐工业设计公司
  • 网站开发 李博如何建一个自己的网站
  • 智能家居设备离线视频回看功能设计:缓存、断网恢复与存储管理的硬核攻略
  • AIOT进军纳斯达克,推动Web3健康金融迈向全球资本市场