Spring Cloud 配置动态刷新:从 Config Data 到 RefreshScope
基线:Spring Boot 3.x、Spring Cloud 202x.x、Spring Cloud Alibaba 与 Nacos 2.x。版本必须按官方兼容矩阵组合。
1. 启动加载和运行时刷新
现代 Spring Boot 项目优先使用 Config Data Import:
spring:
application:
name: order-service
config:
import: optional:nacos:order-service.yaml
Config Data 在应用上下文创建前建立初始 Environment,不等同于旧版 bootstrap.yml。Bootstrap 仍可用于旧项目或特定早期初始化场景,但不应作为新项目默认入口。
2. RefreshScope 的真实语义
@RefreshScope 使用 scoped proxy 缓存目标对象。刷新时销毁目标对象,下次调用重新创建,不是让任意 Bean 的字段瞬间改变。带连接池、线程池、远程客户端或本地缓存的 Bean,必须明确关闭旧资源并创建新资源。
3. Nacos 配置
spring:
cloud:
nacos:
server-addr: <NACOS_SERVER_ADDR>
username: <NACOS_USERNAME>
password: <NACOS_PASSWORD>
config:
file-extension: yaml
refresh-enabled: true
实际属性路径以当前 starter 配置元数据为准。不要把账号、密码或生产地址提交到 Git。
4. 典型刷新链路
Nacos 发现变更 -> 客户端发布刷新事件 -> Spring 更新 Environment
-> ConfigurationProperties 重新绑定 -> RefreshScope 清理目标缓存
-> 下次调用创建新对象
5. 生产边界
固定依赖和镜像版本;保护 Actuator 刷新端点;为配置变更建立审计、审批、灰度和回滚;监控刷新失败和 Bean 重建失败。