当前位置: 首页 > news >正文

nacos 配置不会动态刷新_真香系列:聊聊SpringCloud Nacos服务配置中心

本篇要点

  • 介绍Nacos作为服务配置中心的案例。
  • 介绍namespace、group、DataId三种方案的配置读取。

Nacos服务配置中心之基础配置

新建模块

新建:cloudalibaba-config-nacos-client3377,引入依赖:

                com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-config        com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery        

配置bootstrap.yml

Nacos和Spring Cloud config一样,在项目初始化的时候,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。

另外,SpringBoot中配置文件的加载,bootstrap.yml优先于application.yml

# nacos配置server:  port: 3377spring:  application:    name: nacos-config-client # 构成 Nacos 配置管理 dataId字段的一部分  cloud:    nacos:      discovery:        server-addr: localhost:8848 #Nacos服务注册中心地址      config:        server-addr: localhost:8848 #Nacos作为配置中心地址        file-extension: yaml #指定yaml格式的配置

配置之后,3377服务将从localhost:8848上读取后缀名为yaml的配置文件。

配置application.yml

spring:  profiles:    active: dev #表示开发环境

主启动类

@EnableDiscoveryClient@SpringBootApplicationpublic class NacosConfigClientMain3377 {    public static void main(String[] args) {        SpringApplication.run(NacosConfigClientMain3377.class, args);    }}

服务接口

@RestController@RefreshScope //支持Nacos的动态刷新功能。public class ConfigClientController {    @Value("${config.info}")    private String configInfo;    @GetMapping("/config/info")    public String getConfigInfo() {        return configInfo;    }}

dataId的完整格式及新建配置

在 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}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

综上所述,按照我们的配置,最后的dataId结果应该为:

nacos-config-client-dev.yaml

我们选中配置列表,选择新建配置,DataID就是我们刚刚得到的nacos-config-client-dev.yaml。

ba56f0d2de46769c61453bdfff2dd196.png

新建配置完成之后是这样:

1623b0290566c1c0b1d7a12e7e27a5a6.png

测试

运行3377服务,调用接口

http://localhost:3377/config/info

测试配置读取是否成功。

另外,它支持动态刷新,当我们修改手动修改配置中心数据时,修改的配置会被动态刷新,自动读取。

Nacos服务配置中心之分类配置

解决问题

  1. 实际开发中,一个系统会准备多个环境,如dev开发环境,test测试环境,prod生产环境等,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件?
  2. 一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目都会有相应的开发环境、测试环境等,如何管理这些微服务配置呢?

命名空间、DataId和Group的关系

Namespace默认为空串,公共命名空间(public),分组默认是DEFAULT_GROUP。

5c8b96d0b874cf05b7570653ad00ad72.png

Nacos的数据模型如下:

e828fa7b217bb42f508e827b5635f6ed.png

namespace用于区分部署环境【开发、测试、生产】,创建三个不同的namespace相互隔离。

Group可以把不同的微服务划分到同一个分组中。

Service可以包含多个Cluster集群,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。

Instance是微服务的实例。

三种方案的加载配置

Data Id的方案

保证命名空间相同,分组相同,只有Data Id不同

指定spring.profile.active和配置文件的DataId来使不同环境下读取不同的配置。为了演示这个效果,我们总共新建以下两个配置,保证它们命名空间相同,分组相同,只有Data Id不同:

nacos-config-client-dev.yamlnacos-config-client-test.yaml
44f20a3e11b9c6777e1da7f32a6f3626.png

通过spring.profile.active属性就能进行多环境下配置文件的读取,刚刚已经测试过dev环境,我们测试一下test环境,是否能够读取到:nacos-config-client-test.yaml的配置呢,答案是肯定的,可以访问:http://localhost:3377/config/info测试一下。

spring:  profles:    active: test #表示测试环境

Group方案

保证命名空间相同,Data Id相同,只有分组不同

70ba2da8f7d214941349483603674481.png

注意,这里我们需要在application.yml中指定profile为info,在bootstrap.yml指定group。

## bootstrap.ymlspring:  application:    name: nacos-config-client  cloud:    nacos:      discovery:        server-addr: localhost:8848 #Nacos服务注册中心地址      config:        server-addr: localhost:8848 #Nacos作为配置中心地址        file-extension: yaml #指定yaml格式的配置        group: DEV_GROUP## application.ymlspring:  profiles:    active: info

测试方法不用多说,在TEST_GROUP和DEV_GROUP之间切换,再访问接口即可。

namespace方案

保证命名空间不同

新建两个命名空间:dev和test。

4ab6da1cb4c4da795baa4af598e50e0a.png

如果需要指定命名空间,则指定yml中的namespace属性即可。

spring:  application:    name: nacos-config-client  cloud:    nacos:      discovery:        server-addr: localhost:8848 #Nacos服务注册中心地址      config:        server-addr: localhost:8848 #Nacos作为配置中心地址        file-extension: yaml #指定yaml格式的配置        group: TEST_GROUP        namespace: 43d2f092-e338-4d31-b797-77466bdd8c8f        spring:  profiles:    active: dev #表示开发环境

将会从命名空间ID为43d2f092-e338-4d31-b797-77466bdd8c8f的TEST_GROUP组中,读取nacos-config-client-dev的配置文件。

原文链接:https://www.cnblogs.com/summerday152/p/14092805.html

如果觉得本文对你有帮助,可以转发关注支持一下

相关文章:

  • eclipse配置python解析器_python编辑器:Eclipse PyDev安装的步骤解析
  • python生成列表作为全局列表_如何在python中定义全局列表
  • 如何保存十个以上配方_“前男友”放冰箱,配方师听了都流泪......
  • angular js创建表单_Angular-Formly:在用户单击时动态添加表单字段
  • 起始方位角怎么确定_起始方位角.PPT
  • ue4加载本地图片_ue4 C++ 导入图片
  • python爬虫类型_python爬虫主流存储类型实战
  • 煤炭及煤化工加工会产生什么危废_煤化工危废处置难在哪
  • python如何打印表_Python中的打印表
  • python 傅里叶滤波_Python_opencv_傅里叶变换
  • hbuilderx如何导入样式_HBuilderX使用Vant组件库
  • 为什么nodejs是单进程的_Nodejs探秘:深入理解单线程实现高并发原理
  • python实现相空间重构_用非平衡零差法实现wigner函数的简单测量
  • list stream 最大和最小值_Java 8 Stream 求集合元素每个属性的最大值
  • sap增加事务代码权限_sap 事务代码跳过权限检查
  • 4个实用的微服务测试策略
  • Angular 4.x 动态创建组件
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Javascript编码规范
  • laravel5.5 视图共享数据
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Python进阶细节
  • win10下安装mysql5.7
  • 初识 webpack
  • 机器学习 vs. 深度学习
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 我这样减少了26.5M Java内存!
  • 容器镜像
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #考研#计算机文化知识1(局域网及网络互联)
  • (9)STL算法之逆转旋转
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (南京观海微电子)——I3C协议介绍
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)UDP基本编程步骤
  • (转)jQuery 基础
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ***测试-HTTP方法
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .net framework4与其client profile版本的区别
  • .NET Reactor简单使用教程
  • .net 程序发生了一个不可捕获的异常
  • .NET 指南:抽象化实现的基类
  • .net生成的类,跨工程调用显示注释
  • @EnableAsync和@Async开始异步任务支持
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)