通过配置 spring.cloud.nacos.config. config[n].refresh 来控制该配置集是否支持配置的动态刷新。默认情况下不支持。
控制层使用 Spring 的 @Value 注解来获取配置信息,${} 中对应 Nacos 配置中心配置内容的 key,:后跟默认值。
并且通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新。
package org.example.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.RestController; import java.util.HashMap; import java.util.Map; @RefreshScope @RestController public class ConfigController { @Value("${common.name:}") private String commonName; @Value("${global.name:}") private String globalName; @Value("${refresh.name:}") private String refreshName; @GetMapping("/extConfig") public Map<String, Object> getExtConfig() { Map<String, Object> configMap = new HashMap(); configMap.put("commonName", commonName); configMap.put("globalName", globalName); configMap.put("refreshName", refreshName); return configMap; } } 测试访问::7070/extConfig 结果如下:
共享配置集通过共享配置集的方式也可以实现公共配置的功能,唯一的区别就是共享配置集无法设置组信息,只获取 DEFAULT_GROUP。具体实现方式如下:
server: port: 7070 # 端口 spring: application: name: product-service # 应用名称 cloud: nacos: config: enabled: true # 如果不想使用 Nacos 进行配置管理,设置为 false 即可 server-addr: 127.0.0.1:8848 # Nacos Server 地址 group: MALL_GROUP # 组,默认为 DEFAULT_GROUP file-extension: yaml # 配置内容的数据格式,默认为 properties namespace: 450a3f07-08ee-49f6-8213-9b04b06cd3cc # 对应 dev 环境 # 共享配置集 shared-dataids: ext-config-common01.yaml,ext-config-common02.yaml,ext-config-common03.yaml # 多个配置集逗号隔开 refreshable-dataids: ext-config-common01.yaml # 哪个配置集支持动态刷新访问::7070/extConfig 结果如下:
配置优先级Spring Cloud Alibaba Nacos Config 提供了三种从 Nacos 拉取配置的功能:
A:通过内部相关规则(应用名、配置内容的数据格式等)自动生成相关的 Data Id 配置;
B:通过配置 spring.cloud.nacos.config.ext-config[n].data-id 来支持多个配置集。同时配置多个配置集时,优先级关系根据 n 的值决定,值越大,优先级越高;