要想从配置中心获取配置添加nacos-confifig的依赖:
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
注意:要使用配置中心就要在bootstrap.yml中来配置,bootstrap.yml配置文件的加载顺序要比application.yml要 优先。
使用application.yml加载不到配置中心了就。
在bootstrap.yml添加配置:
server:
port: 56020
#配置服务提供方的地址(ip和端口)
provider:
address: 127.0.0.1:56010
spring:
application:
name: nacos-restful-consumer #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服务发现中心地址
# namespace: f5eec3c1-4f05-40cd-964a-c8d44f342ab4 #指定命名空间的id
config:
server-addr: 127.0.0.1:8848 #配置中心地址
file-extension: yaml #指定配置文件的扩展名,配置文件名称根据application.name的名称加扩展名拼装,为nacos-restful-consumer.yaml
group: DEFAULT_GROUP
nacos-restful-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
在nacos-restful-consumer工程的controller中增加获取配置的web访问端点/confifigs,通过标准的spring @Value 方式。
@Value("${common.name}")
private String common_name;
@Autowired
ConfigurableApplicationContext applicationContext;
@GetMapping(value = "/configs")
public String getvalue(){
// return common_name;
String name = applicationContext.getEnvironment().getProperty("common.name");
String addr = applicationContext.getEnvironment().getProperty("common.addr");
return name+"|"+addr;
}
我们通过nacos控制台更新common.name的配置值,再次访问web端点/confifigs,发现应用程序能够获取到最新
的配置值,说明spring-cloud-starter-alibaba-nacos-confifig 支持配置的动态更新。
注意:可以通过配置spring.cloud.nacos.confifig.refresh.enabled=false来关闭动态刷新
ext:extend,也就是扩展配置
Spring Cloud Alibaba Nacos Confifig可支持自定义 Data Id 的配置。 一个完整的配置案例如下所示:
spring:
application:
name: nacos-restful-consumer #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服务发现中心地址
namespace: f5eec3c1-4f05-40cd-964a-c8d44f342ab4 #指定命名空间的id
config:
server-addr: 127.0.0.1:8848 #配置中心地址
file-extension: yaml #指定配置文件的扩展名,配置文件名称根据application.name的名称加扩展名拼装,为nacos-restful-consumer.yaml
group: DEFAULT_GROUP
# config external configuration
# 1、Data Id group:组名,refresh:动态刷新
ext-config[0]:
data-id: ext-config-common01.yaml
group: COMMON_GROUP
refresh: true
ext-config[1]:
data-id: ext-config-common02.yaml
group: COMMON_GROUP
refresh: true
可以看到:
通过 spring.cloud.nacos.config.ext-config[n].data-id
的配置方式来支持多个 Data Id 的配置。
通过 spring.cloud.nacos.config.ext-config[n].group
的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.ext-config[n].refresh
的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
注意: spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
测试:
配置ext-confifig-common01.yaml:
要写的我放这了,复制就行了,不用跟着图片打了:
ext-config-common01.yaml
COMMON_GROUP
common:
name: yyl
addr: jiuzhou
配置ext-confifig-common02.yaml:
编写测试代码:
@Value("${common.name}")
private String common_name;
@Autowired
ConfigurableApplicationContext applicationContext;
@GetMapping(value = "/configs")
public String getvalue(){
return common_name;
String name = applicationContext.getEnvironment().getProperty("common.name");
String addr = applicationContext.getEnvironment().getProperty("common.addr");
return name+"|"+addr;
}
重启nacos-restful-consumer工程
访问:http://127.0.0.1:56020/confifigs
通过测试发现:
扩展配置优先级是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。
通过内部相关规则(应用名、扩展名 )自动生成相关的 Data Id 配置的优先级最大。