SpringCloudAlibaba中使用Nacos实现配置中心和配置动态刷新

淩亂°似流年 2023-09-30 14:02 73阅读 0赞

场景

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的依赖

  1. <!--nacos-config-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>

除此之外还需要添加服务发现以及web的相关依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>SpringCloudDemo</artifactId>
  7. <groupId>com.badao</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>cloudalibaba-config-nacos-client3377</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <!--nacos-config-->
  18. <dependency>
  19. <groupId>com.alibaba.cloud</groupId>
  20. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  21. </dependency>
  22. <!--nacos-discovery-->
  23. <dependency>
  24. <groupId>com.alibaba.cloud</groupId>
  25. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  26. </dependency>
  27. <!--web + actuator-->
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-web</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-actuator</artifactId>
  35. </dependency>
  36. </dependencies>
  37. </project>

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,

拉取配置之后,才能保证项目的正常启动。

springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。

所以新建bootstrap.yml配置文件来配置ncaos相关的配置

  1. # nacos配置
  2. server:
  3. port: 3377
  4. spring:
  5. application:
  6. name: nacos-config-client
  7. cloud:
  8. nacos:
  9. discovery:
  10. server-addr: localhost:8848 #Nacos服务注册中心地址
  11. config:
  12. server-addr: localhost:8848 #Nacos作为配置中心地址
  13. file-extension: yaml #指定yaml格式的配置

然后再新建application.yml,配置环境是开发、测试、产品

  1. spring:
  2. profiles:
  3. active: dev # 表示开发环境

新建controller,并添加@RefreshScope注解来支持Nacos的动态刷新功能,并获取配置文件的内容

参考官方说明

0603d998ae2346e7d384c3f2fab5c6d6.png

  1. package com.badao.springcloudalibabademo.controller;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.cloud.context.config.annotation.RefreshScope;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. @RestController
  7. @RefreshScope //支持Nacos的动态刷新功能。
  8. public class ConfigClientController
  9. {
  10. @Value("${config.info}")
  11. private String configInfo;
  12. @GetMapping("/config/info")
  13. public String getConfigInfo() {
  14. return configInfo;
  15. }
  16. }

新建主启动类并添加注解@EnableDiscoveryClient

  1. package com.badao.springcloudalibabademo;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. @EnableDiscoveryClient
  6. @SpringBootApplication
  7. public class NacosConfigClientMain3377
  8. {
  9. public static void main(String[] args) {
  10. SpringApplication.run(NacosConfigClientMain3377.class, args);
  11. }
  12. }

2、启动Nacos,并访问

http://localhost:8848/nacos

点击配置中心,点击加号,新建一个配置文件

02dbcb3be6764ebf942b7ff910ce5de8.jpeg

那么每个服务是怎样找到这个对应的配置文件那?

换句话说,nacos怎样知道你新建的配置文件是属于哪个服务的那?

所以在新建配置文件时会有对应的规则/公式来进行匹配。

比如这里的配置文件的Data ID为nacos-config-client-dev.yaml

20b14ed9110948ff9de3af90ab8120fd.jpeg

这个命名是根据官方的说明的公式来

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

827a5bd46e5b4702bccf255715e443a3.jpeg

在Nacos Spring Cloud中,dataId的完整格式:

  1. ${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 类型。

修改上面新建配置文件的内容如下

  1. config:
  2. info: from nacos config center ,nacos-config-client-dev.yaml,version = 1

3、启动上面新建的服务3377,并访问获取配置文件的接口

http://localhost:3377//config/info

87f9fbee2cae4715a199790172a2a18e.jpeg

修改nacos中配置文件内容,此时再访问该接口,可以看到实现了动态刷新

d8a2afa59e69497a892490862c9f6594.gif

发表评论

表情:
评论列表 (有 0 条评论,73人围观)

还没有评论,来说两句吧...

相关阅读