场景
SpringCloudConfig分布式配置中心介绍与搭建使用以及ConfigClient实现动态刷新配置:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/125053928
在上面实现ConfigClient动态刷新的机制下,是通过post接口调用ConfigClient的方式去进行动态
刷新配置。下面使用Nacos实现配置中心并实现配置动态刷新。
SpringCloudAlibaba中使用Nacos实现服务注册与发现(从实例入手):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/125177618
在上面实现Nacos作为服务注册中心的基础上,怎样使用Nacos作为配置中心。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、新建子模块cloudalibaba-config-nacos-client3377模块
修改其pom文件,添加nacos-config的依赖
<!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
除此之外还需要添加服务发现以及web的相关依赖
<?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>SpringCloudDemo</artifactId> <groupId>com.badao</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-config-nacos-client3377</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--web + actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,
拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。
所以新建bootstrap.yml配置文件来配置ncaos相关的配置
# nacos配置 server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置
然后再新建application.yml,配置环境是开发、测试、产品
spring:
profiles:
active: dev # 表示开发环境
新建controller,并添加@RefreshScope注解来支持Nacos的动态刷新功能,并获取配置文件的内容
参考官方说明
package com.badao.springcloudalibabademo.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; @RestController @RefreshScope //支持Nacos的动态刷新功能。 public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo() { return configInfo; } }
新建主启动类并添加注解@EnableDiscoveryClient
package com.badao.springcloudalibabademo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class NacosConfigClientMain3377 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3377.class, args); } }
2、启动Nacos,并访问
点击配置中心,点击加号,新建一个配置文件
那么每个服务是怎样找到这个对应的配置文件那?
换句话说,nacos怎样知道你新建的配置文件是属于哪个服务的那?
所以在新建配置文件时会有对应的规则/公式来进行匹配。
比如这里的配置文件的Data ID为nacos-config-client-dev.yaml
这个命名是根据官方的说明的公式来
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
在Nacos Spring Cloud中,dataId的完整格式:
${prefix}-${spring.profiles.active}.${file-extension}
prefix:
默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active :
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。
注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
ile-exetension:
为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。
目前只支持 properties 和 yaml 类型。
修改上面新建配置文件的内容如下
config: info: from nacos config center ,nacos-config-client-dev.yaml,version = 1
3、启动上面新建的服务3377,并访问获取配置文件的接口
http://localhost:3377//config/info
修改nacos中配置文件内容,此时再访问该接口,可以看到实现了动态刷新