SpringCloudAlibabaNacosConfig学习笔记 迈不过友情╰ 2024-03-27 08:45 1阅读 0赞 **目录** 1. Nacos配置中心使用 2 搭建nacos-config服务 3 Config相关配置 4 .配置的优先级 5. @RefreshScope -------------------- ## **1. Nacos****配置中心使用** ## 官方文档: https://github.com/alibaba/springcloudalibaba/wiki/Nacosconfig Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使 用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。 1.维护性 2.时效性 3.安全性 ![12b92771cff14b5bbcf4af2b8e650c68.png][] **springcloud config 对比** **三大优势:** springcloud config大部分场景结合git 使用, 动态变更还需要依赖Spring Cloud Bus 消息总线来通过所有的客户端变 化. springcloud config不提供可视化界面 nacos config使用长轮询更新配置, 一旦配置有变动后,通知Provider的过程非常的迅速, 从速度上秒杀springcloud 原来的config几条街, ![4797c2a390164d04ad61e856bf939c8c.png][] **1.1** **快速开始** ![75c33427c26e442293036892451f1195.png][] 最佳实践: * Namespace:代表不同**环境**,如开发、测试、生产环境。 * Group:代表某**项目**,如XX医疗项目、XX电商项目 * DataId:每个项目下往往有若干个**工程(微服务)**,每个配置集(DataId)是一个**工程(微服务)**的**主配置文件** ![326d81658e944988b912e2d4f7b5ff46.png][] 启动权限:修改application.properties ![b262782ec79343f08a6d429338cb7c56.png][] ## **2 搭建nacos-config服务** ## 1)引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- naocs config依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies> 2)添加bootstrap.yml spring: application: name: com.wang.order cloud: nacos: server-addr: 127.0.0.1:8848 username: nacos password: nacos config: ##默认public namespace: c619bc52-0445-4d0d-b2a2-6bcf6d3d5183 3) 启动服务,测试微服务是否使用配置中心的配置 package com.wang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @BelongsProject: SpringCloudAlibabaLearn * @BelongsPackage: com.wang * @Author: wang fei * @CreateTime: 2023-01-20 16:45 * @Description: TODO * @Version: 1.0 */ @SpringBootApplication public class NacosConfigApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args); String userName = applicationContext.getEnvironment().getProperty("user.name"); String userAge = applicationContext.getEnvironment().getProperty("user.age"); System.err.println("username :"+userName+"; age: "+userAge); } } 结果: ![8d03d472c19e4205ab3b268791eeb51a.png][] ## **3 Config****相关配置** ## Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT\_GROUP ![0aebe031a66c46c3b6a25d017d60097c.png][] * **支持配置的动态更新(****ps:除了默认的配置文件, 其他dataId都要加上后缀)** * **支持****profile****粒度的配置** springcloudstarteralibabanacosconfig 在加载配置的时候,不仅仅加载了以 dataid 为 $\{spring.application.name\}.$\{file-extension:properties\} 为前缀的基础配置,还加载了dataid为 $\{spring.application.name\}-$\{profile\}.$\{file-extension:properties\} 的基础配置。在日常开发中如果遇到多套环境下的不 同配置,可以通过Spring 提供的 $\{spring.profiles.active\} 这个配置项来配置。profile 的配置文件 大于 默认配置的文件。 并且形成互补。**ps:只有默认的配置文件, 才会应用profile** * **支持自定义** **namespace** **的配置** 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景 之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 在没有明确指定 $\{spring.cloud.nacos.config.namespace\} 配置的情况下, 默认使用的是 Nacos 上 Public 这个 namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现: spring.cloud.nacos.config.namespace=71bb9785‐231f‐4eca‐b4dc‐6be446e12ff8 * **支持自定义** **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=DEVELOP\_GROUP * **支持自定义扩展的** **Data Id** **配置** Data ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置 集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命 名规则保证全局唯一性。此命名规则非强制。 通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。 bootstrap.yml spring: application: name: com.wang.order cloud: nacos: server-addr: 127.0.0.1:8848 username: nacos password: nacos config: ##默认public namespace: c619bc52-0445-4d0d-b2a2-6bcf6d3d5183 # group: wang # Nacos客户端 默认是Properties的文件扩展名 (只针对默认配置文件和profile) # 一旦修改成了非Properties格式,则必须通过file-extension进行设置 file-extension: yaml #refresh-enabled: false nacos客户端将无法感知配置的变化 shared-configs: - data-id: com.wang.common.properties #[0] refresh: true #group: 默认Default-group - data-id: com.wang.common02.properties #[1] refresh: true extension-configs[0]: data-id: com.wang.common03.properties refresh: true # 配置文件的优先级(优先级大的会覆盖优先级小的, 并且会形成互补) # profile> 默认配置文件>extension-configs(下标越大优先级就越大)>shared-configs(下标越大优先级就越大) ![6c554e7d51f343439bf3e1e279a22ec3.png][] ## **4 .****配置的优先级** ## Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。 * A: 通过 spring.cloud.nacos.config.shared-configs 支持多个共享 Data Id 的配置 * B: 通过 spring.cloud.nacos.config.ext-config\[n\].data-id 的方式支持多个扩展 Data Id 的配置 * C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置 **当三种方式共同使用时,他们的一个优先级关系是:A < B < C** **优先级从高到低:** **1) nacosconfigproduct.yaml 精准配置** **2) nacosconfig.yaml 同工程不同环境的通用配置** **3) extconfig: 不同工程 扩展配置** **4) shareddataids 不同工程通用配置** ## **5. @RefreshScope** ## @Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解 package com.wang.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/config") //动态感知@RefreshScope @RefreshScope public class ConfigController { @Value("${user.name}") public String name; @RequestMapping("/show") public String show(){ return name; } } [12b92771cff14b5bbcf4af2b8e650c68.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/f15494c7344842a0ab60b6453e9f0237.png [4797c2a390164d04ad61e856bf939c8c.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/cb5d2c0ac62e4d29af331035728a2b80.png [75c33427c26e442293036892451f1195.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/01decf0fea4e4ff69ac08e3ff7b5113f.png [326d81658e944988b912e2d4f7b5ff46.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/8997e6602e494ed1a1a4566c126115e1.png [b262782ec79343f08a6d429338cb7c56.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/16498a053a964d8b931a58e3e5f2b4d9.png [8d03d472c19e4205ab3b268791eeb51a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/d357c72108db48d9a0d5bb965e2d0af6.png [0aebe031a66c46c3b6a25d017d60097c.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/184cf23031254d4c86d551b825f55e23.png [6c554e7d51f343439bf3e1e279a22ec3.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/27/84b822241ee144658dddc09fb3a51a3a.png
相关 「学习笔记」学习笔记合集 可以点击 [https://www.cnblogs.com/hongzy/tag/%E7%AC%94%E8%AE%B0/][https_www.cnblogs.com_hong 淩亂°似流年/ 2023年06月05日 12:48/ 0 赞/ 17 阅读
相关 学习笔记 学习笔记 sudo adduser lilei sudo usermod -G sudo lilei sudo deluse 客官°小女子只卖身不卖艺/ 2022年11月26日 12:58/ 0 赞/ 26 阅读
相关 学习笔记 \ajax: 1、概念:异步的JavaScript 和 xml 1.1异步和同步:客户端和服务器端相互通信的基础上 \客户端必须等待服务器端的响应。在等待的期间客户 深藏阁楼爱情的钟/ 2022年10月29日 13:24/ 0 赞/ 279 阅读
相关 学习笔记 一. CSS 如何实现文字的垂直居中 1. 二.问题记录 1.创建新的JSP页面的时候报错:The superclass “javax.servlet.http.H 超、凢脫俗/ 2022年08月20日 09:30/ 0 赞/ 143 阅读
相关 【学习笔记】git学习笔记 使用git的好处 可以保存每个版本,只要在每个版本做完后进行上传 ![这里写图片描述][70] 可以异地读取更新 爱被打了一巴掌/ 2022年05月14日 09:10/ 0 赞/ 403 阅读
相关 学习笔记 我的第一天学习c\ 1、c\学习网址 [https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide 矫情吗;*/ 2022年05月08日 06:16/ 0 赞/ 323 阅读
相关 学习笔记 测试 ORM JPA EJB JPQL MOM JMS ORM 对象关系映射 英语:Object Relational M 爱被打了一巴掌/ 2022年02月16日 01:57/ 0 赞/ 394 阅读
相关 [笔记] Docker 学习笔记 1. 什么是 Docker > 官方文档:[链接][Link 1],中文文档:[链接][Link 2] Docker 属于 Linux 容器的一种封装,提供简单易用的容 缺乏、安全感/ 2021年11月27日 02:01/ 0 赞/ 588 阅读
相关 学习笔记 1、js如何将136分钟转化为几小时,几分钟 return (Math.floor(minutes/60) + "小时" + (minutes%60) + "分" 爱被打了一巴掌/ 2021年07月25日 23:46/ 0 赞/ 1049 阅读
还没有评论,来说两句吧...