配置动态刷新与共享
约 534 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Spring Cloud › 配置中心
配置动态刷新原理
监听配置变化
@Component
public class ConfigChangeListener {
@Autowired
private NacosConfigManager nacosConfigManager;
@PostConstruct
public void init() {
nacosConfigManager.getConfigService().addListener(
"user-service-dev.yaml",
"DEFAULT_GROUP",
new Listener() {
@Override
public Executor getExecutor() {
return Executors.newSingleThreadExecutor();
}
@Override
public void receiveConfigInfo(String configInfo) {
log.info("配置发生变化: {}", configInfo);
// 执行自定义逻辑(如重新加载缓存)
}
}
);
}
}自定义刷新 Bean
@Component
public class DynamicConfigService {
private volatile String featureToggle;
@Autowired
private Environment environment;
@Scheduled(fixedDelay = 5000) // 每隔 5 秒检查配置
public void refreshFeatureToggle() {
// 从 Environment 获取最新值(已由 Nacos 自动更新)
this.featureToggle = environment.getProperty("app.feature.new-checkout");
}
public boolean isNewCheckoutEnabled() {
return Boolean.parseBoolean(featureToggle);
}
}多环境配置架构
Nacos 配置结构:
├── common.yaml # 所有环境共享
├── datasource-dev.yaml # 开发环境数据源
├── datasource-prod.yaml # 生产环境数据源
├── redis-dev.yaml # 开发环境 Redis
├── redis-prod.yaml # 生产环境 Redis
├── user-service-dev.yaml # 用户服务开发配置
└── user-service-prod.yaml # 用户服务生产配置# bootstrap.yml(各环境统一)
spring:
cloud:
nacos:
config:
shared-configs:
- data-id: common.yaml
- data-id: datasource-${spring.profiles.active}.yaml
- data-id: redis-${spring.profiles.active}.yamlNacos 配置加密
# 开启加密
spring:
cloud:
nacos:
config:
encrypted-data-key: your-aes-key# Nacos 配置值加密(使用 AES 加密)
app:
jwt:
secret: cipher:ENC(your-encrypted-secret)配置管理最佳实践
# 1. 敏感配置(数据库密码、密钥)用加密
# 2. 环境差异配置(数据源、地址)放在对应 profile
# 3. 功能开关(feature toggle)动态刷新
# 4. 共享配置(日志级别、通用参数)用 shared-configs
# 5. 命名空间隔离环境,分组隔离业务小结
- 配置动态刷新基于 Nacos 的
ConfigService.addListener+@RefreshScope。 @Scheduled+Environment实现自定义配置的热加载。- 多环境通过
${spring.profiles.active}动态选择配置。 - 敏感配置加密存储,防止泄露。
- 建议:日志级别、功能开关、线程池参数等放在 Nacos 动态管理。
上一节:Nacos Config 配置中心 下一节:Sentinel 流控与降级
