目录
5. 重启comsumer服务,验证是否项目启动加载优先在配置中心获取配置
本章节进行Nacos动态配置的实验,具体消费者的服务代码参照《Spring Cloud Alibaba系列-第四节-创建生产者与消费者服务,注册到Nacos监控服务》
观博有逻辑,导航来相助《Spring Cloud Alibaba系列-目录导航》
1. 修改consumer模块的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service-cloud</artifactId>
<groupId>com.run.ayena</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service-consumer-8001</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
2. 修改ConsumerController.java
如下图:增加@RefreshScope 动态刷新,使用@Value注入配置文件中的local.name配置,在echoFeign中进行local.name的返回结果输出
3. 新增bootstrap.properties文件
配置文件内容分别如下:
bootstrap.properties 配置如下
#设置应用名称
spring.application.name=consumer-8001
#指定配置中心的地址与端口
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#指定配置文件的扩展名,不指定的话默认properties
spring.cloud.nacos.config.file-extension=properties
#指定配置文件的group,不指定的话默认DEFAULT_GROUP
spring.cloud.nacos.config.group=consumer
local.name=TestRefreshScope
application.properties配置如下
#设置服务端口号
server.port=8001
#设置nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
4. 启动项目,并且在Nacos中进行配置
点击Nacos配置列表中的加号
按照下图填写内容,并且进行发布
此时在consumer控制台会出现如下图,代表local.name已经进行刷新
访问http://localhost:8001/echo/feign/1111 会发现,动态配置修改已经生效
5. 重启comsumer服务,验证是否项目启动加载优先在配置中心获取配置
验证发现:重启comsumer服务后,首先从Nacos中进行配置读取
6. 为什么是两个配置文件
Nacos同SpringCloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
Springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application.
7. 添加配置的规则
首先之所以需要配置spring.application.name ,是因为它是构成 Nacos 配置管理 dataId 字段的一部分.在 Nacos Spring Cloud 中, dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。
spring.profile.active 即为当前环境对应的 profile, 注意:当 spring.profile.active 为空时,对应的连接符 -- 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和yaml 类型。
通过 Spring Cloud 原⽣注解 @RefreshScope 实现配置⾃动更新.
最后公式:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
对照此公式,那么consumer的Data ID 为consumer-8001.properties