SpringCloudAlibaba配置中心: nacos-config

nacos-config配置中心

本项目代码与笔记已存放在Gitee仓库 地址: 代码,笔记

文章目录

  • nacos-config配置中心
    • 1.1 快速开始
    • 1.2 搭建nacos-config服务
    • 1.3 Config相关配置
      • 1.3.1 支持profile粒度的配置
      • 示例:
      • 1.3.2 支持命名空间分类配置(按环境规类)
      • 1.3.3 支持自定义 Group 的配置(按项目规类)
      • 1.3.4 支持自定义扩展的 Data Id 配置
      • 1.3.5 @RefreshScope

官方文档: https://github.com/alibaba/spring­cloud­alibaba/wiki/Nacos­config

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

1.维护性 2.时效性 3.安全性

springcloud config 对比

三大优势:

  • springcloud config大部分场景结合git 使用, 动态变更还需要依赖Spring Cloud Bus 消息总线来通过所有的客户端变化
  • springcloud config不提供可视化界面
  • nacos config使用长轮询更新配置, 一旦配置有变动后,通知Provider的过程非常的迅速, 从速度上秒杀springcloud原来的config几条街。

1.1 快速开始

点击加号新建配置

Namespace:代表不同环境,如开发、测试、生产环境。

Group:代表某项目,如XX医疗项目、XX电商项目

DataId:每个项目下往往有若干个工程(微服务),每个配置集(DataId)是一个工程(微服务)主配置文件

  • 比如新建一个公共订单配置,点击发布,就会出现在配置列表。

  • 还可以直接勾选配置点击克隆到其他命名空间(环境)

权限控制

  • 启动权限:如果需要使用权限配置,修改application.properties,使之生效

1.2 搭建nacos-config服务

通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更

  • 先new一个module

new->module->Next->输入名字->finish

  • 新建启动类

    如果指定了namespace:public会有一个bug控制台一直打印ClientWorker

  • 新建配置类

  • 添加依赖
<!--NacosConfig依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 在启动类获取配置信息(在使用之前得先加上bootstrap.properties配置文件来配置Nacos Server地址)

/**
 * Create with IntelliT IDEA
 *
 * @Author: zhengmingzhe
 * @Date: 2023/03/19/16:36
 * @Description: 配置中心服务启动类
 */
@SpringBootApplication
public class ConfigApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);
        String orderName = applicationContext.getEnvironment().getProperty("order.name");
        String num = applicationContext.getEnvironment().getProperty("order.num");
        System.out.println("order name :" + orderName + "; num: " + num);
    }
}
  • 加上bootstrap.yml配置文件来配置Nacos Server地址
spring:
  application:
    name: config-nacos
  cloud:
    nacos:
      server-addr: 192.168.13.1:8848
      username: nacos
      password: nacos
      config:
        namespace: public

注意如果在配置里改了权限开启为true就必须得配置nacos用户名密码

此时配置未生效控制台打印为null

2023-03-19 16:55:37.480  INFO 17536 --- [           main] c.a.nacos.client.config.impl.CacheData   : [fixed-192.168.13.1_8848-public] [add-listener] ok, tenant=public, dataId=config-nacos, group=DEFAULT_GROUP, cnt=1
order name :null; num: null

这是因为服务名必须得和nacos里面配置的dataId保持一致

spring:
  application:
    name: com.zmz.order
  cloud:
    nacos:
      server-addr: 192.168.13.1:8848
      username: nacos
      password: nacos
      config:
        namespace: public

这时配置就生效了,当然如果想服务名与dataId不一致就得手动指定dataId

控制台:[add-listener] ok, tenant=public, dataId=com.zmz.order, group=DEFAULT_GROUP, cnt=1
order name : 蔡徐坤; num:  21

1.3 Config相关配置

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是

DEFAULT_GROUP

支持配置的动态更新

@SpringBootApplication
public class ConfigApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);
        while(true){
        //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
        String orderName = applicationContext.getEnvironment().getProperty("order.name");
        String num = applicationContext.getEnvironment().getProperty("order.num");
        System.out.println("order name :" + orderName + "; num: " + num);
        TimeUnit.SECONDS.sleep(1);
        }
    }
}

ps:除了默认的配置文件, 其他dataId都要加上后缀

Nacos客户端默认是Properties类型的配置如果想使用yml需要如下配置

spring:
  application:
    name: com.zmz.order
  cloud:
    nacos:
      server-addr: 192.168.13.1:8848
      username: nacos
      password: nacos
      config:
        namespace: public
        file-extension: yaml
     #   refresh-enabled: false   客户端将无法感知配置的变化
        
#Nacos客户端默认是Properties类型的配置如果想使用yml需要 file-extension: yaml(只针对默认配置文件和profile格式配置文件,可以自定义配置文件)

1.3.1 支持profile粒度的配置

(不同的环境不同的配置文件比如application-dev.yml )

server:
  port: 8050
spring:
  profiles:
    active: dev

spring­cloud­starter­alibaba­nacos­config 在加载配置的时候,不仅仅加载了以 dataid 命名为 s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties} 为前缀的基础配置,还加载了dataid命名为 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties} 的基础配置**(除了默认的配置文件,其他配置文件必须写上后缀)**。在日常开发中如果遇到多套环境下的不 同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

但是只有默认配置文件(跟服务名相同的dataId的配置文件)可以使用profile粒度的配置

示例:

创建一个-dev的配置文件

这里会有一个配置文件生效的优先级(优先级大的会覆盖优先级小的并且互补),前提是去掉指定 file-extension: yaml配置文件后缀

profile>默认配置文件>自定义配置文件

1.3.2 支持命名空间分类配置(按环境规类)

支持自定义 namespace 的配置

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景 之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

直接修改config.namespace为指定的命名空间id就可以了

 spring.cloud.nacos.config.namespace=8f46651d-94f6-4697-8054-8bc25b815165

1.3.3 支持自定义 Group 的配置(按项目规类)

Group是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置。在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认是DEFAULT_GROUP 。如果需要自定义自己的Group,可以通过以下配置来实现:

spring.cloud.nacos.config.group= GROUP_ZMZ

1.3.4 支持自定义扩展的 Data Id 配置

Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置 集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命 名规则保证全局唯一性。此命名规则非强制。

  • 修改application测试
@SpringBootApplication
public class ConfigApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);
        String orderName = applicationContext.getEnvironment().getProperty("order.name");
        String num = applicationContext.getEnvironment().getProperty("order.num");
        String userConfig = applicationContext.getEnvironment().getProperty("user.config");
        System.out.println("order name :" + orderName + "; num: " + num);
        System.out.println("userConfig :" + userConfig);
    }
}
  • 修改yaml
spring:
  application:
    name: com.zmz.order
  cloud:
    nacos:
      server-addr: 192.168.13.1:8848
      username: nacos
      password: nacos
      config:
        namespace: public
        #        namespace: 8f46651d-94f6-4697-8054-8bc25b815165
        file-extension: yaml
        #   refresh-enabled: false   客户端将无法感知配置的变化

        group: DEFAULT_GROUP
        shared-configs:
          - data-id: com.zdy.common.properties
            refresh: true
        extension-configs:
          - data-id: com.extension.common.properties
            refresh: true
#Nacos客户端默认是Properties类型的配置如果想使用yml需要 file-extension: yaml(只针对默认配置文件和profile格式配置文件,可以自定义配置文件)
#除了默认的配置文件,其他配置文件必须写上后缀
#profile>默认配置文件>自定义配置文件( extension-configs:>shared-configs,在下表越大优先级越大)

1.3.5 @RefreshScope

@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
    @Value("${user.name}")
    public String userName;

    @RequestMapping("/show")
    public String show() {
        return userName;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/1506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【批处理】- 批处理自动安装Mysql与Redis

前言 在全新环境中安装MySQL与Redis操作是挺麻烦的&#xff0c;于是就想使用脚本来自动安装&#xff0c;使用批处理进行一步到位的安装&#xff0c;后面还能使用工具进行打包成exe可执行文件&#xff0c;一键安装&#xff0c;最后能够更好的部署项目到windows系统的服务器。 …

READ: Large-Scale Neural Scene Rendering for Autonomous Driving

READ: Large-Scale Neural Scene Rendering for Autonomous Driving &#xff1a;面向自动驾驶的大规模神经场景绘制 门卷积 https://www.jianshu.com/p/09fc8490104d https://blog.csdn.net/weixin_44996354/article/details/117409438摘要&#xff1a;论文提出了一种大规模神…

vue2前端实现html导出pdf功能

1. 功能实现方案 1.html转换成canvas后生成图片导出pdf&#xff08;本文选用&#xff09; html转canvas插件&#xff1a;html2canvas是一款将HTML代码转换成Canvas的插件&#xff1b;canvas生成pdf&#xff1a;jsPDF是一个使用Javascript语言生成PDF的开源库 2.HTML代码转出…

【剑指offer】10~11.斐波那契数列(C# 实现)

文章目录前言关于编译环境10- I. 斐波那契数列10- II. 青蛙跳台阶问题11. 旋转数组的最小数字结语前言 &#x1f340; 大家好&#xff0c;我是哈桑。这是自己的 C# 做题记录&#xff0c;方便自己学习的同时分享出来。 关于编译环境 注意&#xff0c;笔者使用的编译环境是 .NET …

Java学习星球,Java学习路线

目录一、Java学习路线二、学习计划三、为何会有Java学习星球&#xff1f;四、加入星球后&#xff0c;你可以得到什么&#xff1f;五、如何加入Java学习星球&#xff1f;六、打卡挑战大家好&#xff0c;我是哪吒&#xff0c;一个靠着热情攀登至C站巅峰的中年男子&#xff0c;CSD…

全网最火爆,Python接口自动化测试-接口数据 RSA 加密和签名实现(超详细)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 在工作中&#xff0…

算法基础---数学知识

文章目录 质数 试除法判定质数试除法分解质因数朴素筛法求质数埃氏筛法求质数线性筛法求质数约数 试除法求所有约数试除法求所有约数之和约数个数和约数之和欧几里得算法一、质数 1.试除法判定质数--O(sqrt(N)) 原理&#xff1a;把从[2,n-1]中的每一个自然数作为除数来除n&a…

基于 Apache Flink 的实时计算数据流业务引擎在京东零售的实践和落地

摘要&#xff1a;本文整理自京东零售-技术研发与数据中心张颖&闫莉刚在 ApacheCon Asia 2022 的分享。内容主要包括五个方面&#xff1a; 京东零售实时计算的现状实时计算框架场景优化&#xff1a;TopN场景优化&#xff1a;动线分析场景优化&#xff1a;FLINK 一站式机器学…

【Linux】写一个基础的bash

头文件#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/wait.h> #include<sys/stat.h> #include<string.h> #include<pwd.h> #include<dirent.h>分割输入的命令串字符串或参数内容为空则退出strtok( ,…

【MySQL】数据类型

目录 一、数据类型分类 二、数值类型 bit&#xff1a; tinyint&#xff1a; ​编辑 smallint&#xff1a; memdiumint&#xff1a; int&#xff1a; bigint&#xff1a; float&#xff1a; ​编辑 decimal&#xff1a; 三、文本类型 char&#xff1a; 字符的概念&a…

出入了解——Vue.js

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

技术掉:PDF显示,使用pdf.js

PDF 显示 场景&#xff1a; 其实直接显示 pdf 可以用 iframe 标签&#xff0c;但产品觉得浏览器自带的 pdf 预览太丑了&#xff0c;而且无法去除那些操作栏。 解决方案&#xff1a;使用 pdf.js 进行显示 第一步&#xff1a;引入 pdf.js 去官网下载稳定版的 pdf.js 文件 然后…

ElasticSearch-第二天

目录 文档批量操作 批量获取文档数据 批量操作文档数据 DSL语言高级查询 DSL概述 无查询条件 叶子条件查询 模糊匹配 match的复杂用法 精确匹配 组合条件查询(多条件查询) 连接查询(多文档合并查询) 查询DSL和过滤DSL 区别 query DSL filter DSL Query方式查…

使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录

兄弟们天天看基础看腻了吧 今天来分享一下如何使用Python突破某网游游戏JS加密限制&#xff0c;进行逆向解密&#xff0c;实现自动登录。 逆向目标 目标&#xff1a;某 7 网游登录主页&#xff1a;aHR0cHM6Ly93d3cuMzcuY29tLw接口&#xff1a;aHR0cHM6Ly9teS4zNy5jb20vYXBpL…

Vue的命令式和声明式的概念

1.命令式框架(jQuery) 这里有个小例子&#xff1a; 1.获取id为app的div标签 2.设置他的文本内容是hello&#xff0c;world 3.为其绑定点击事件 4.当点击时候弹出提示ok 1.首先我们通过$来活动app的标签 $(#app)//获取id为app的标签 2.然后通过text来讲内容设置为hello&am…

Sentinel 授权规则规则持久化

本篇博客我们来学习授权规则&#xff0c;授权规则是对请求者的一种身份的判断。 1、授权规则 授权规则是对请求者的身份做一个判断。你有没有权限来访问我&#xff1f;那就有人可能会说这个功能&#xff0c;好像以前我们在学习微服务的时候讲过网关他不就是把门的吗&#xff1…

云上办公系统项目

云上办公系统项目1、云上办公系统1.1、介绍1.2、核心技术1.3、开发环境说明1.4、产品展示后台前台1.5、 个人总结2、后端环境搭建2.1、建库建表2.2、创建Maven项目pom文件guigu-oa-parentcommoncommon-utilservice-utilmodelservice-oa配置数据源、服务器端口号application.yml…

springboot车辆充电桩

sprinboot车辆充电桩演示录像2022开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;ecli…

文法和语言的基本知识

一、什么形式化的方法用一套带有严格规定的符号体系来描述问题的方法二、什么是非形式化的方法对程序设计语言的描述从语法、语义和语用三个方面因素来考虑所谓语法是对语言结构定义所谓语义是描述了语言的含义所谓语用则是从使用的角度去描述语言三、符号串字母表和符号串字母…

vue基于vant封装可精确到秒的时间选择器

前言 在移动开发中&#xff0c;时间选择的控件比比皆是&#xff0c;但却鲜有类似的组件可以精确到秒级别的&#xff0c;官方可能是考虑到小屏幕手机的显示问题&#xff0c;也可能是使用的场景寥寥无几&#xff0c;但是少不代表没有&#xff0c;所以最近花了点时间基于 vant 组件…