| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> SpringCloud的nacos多项目、多环境的命名空间和分组配置 -> 正文阅读 |
|
[Java知识库]SpringCloud的nacos多项目、多环境的命名空间和分组配置 |
目录 首先,在bootstrap.properties文件中指定环境 然后,在bootstrap.properties文件中指定namespace和group 一、前言用过SpringCloudAlibaba的小伙伴都知道nacos的配置有一个namespace和group的概念,这两个概念的字面意思都很容易理解,但是实际项目中使用起来,却不是那么回事了。 这就好比,你面试的时候问一个人,分布式事务的解决方式有哪些,他可能会告诉你两阶段提交、三阶段提交等等,然后针对各个方式是如何实现的、原理是什么,说的也很清楚。 这个时候你如果问题,那如何落地呢? 不少人,此时就会傻眼了! 你是不是这个样子呢? 那这个namespace和group其实和上面我们讲解的小案例是同样的道理,只不过namespace和group实际落地也简单一些,只是规范与否的问题。 有些小伙伴可能会讲,稍微不那么规范也没啥问题,就像我们代码中一般不能有魔法值,但是大多数项目都会有的,甚至不少知名开源项目也是如此。 有这个思路的小伙伴,说明是真的有在思考,恭喜你! 我们拿代码中的魔法值和namespace与group的问题来说一说。 魔法值的优点是:
缺点:
魔法值的优缺点大体如此,不必较真。 其实我们看魔法值的问题,真的不是很大。但是namespace和group的话就不一定了。 二、namespace和group的不规范如果是小公司小团队,或者说少数几个项目有自己独立的nacos,那怎么玩都影响不大,这个其实就和我们平时自己玩的demo基本一个调子,只不过项目中的更真实一点而已。 但是如果真的是在生产上使用,而且是整个公司的nacos集群的话,而且不是小项目、小团队的话,这个就有必要认真考虑一下了。因为一旦规范定下来了,后面再变更,是一个很麻烦的事情,整个公司的项目都要跟着做变更,你未必能说服领导或者说服对方配合你,那你就gg了。 如果不规范,会产生一些问题,会比较麻烦,后面我们慢慢说。 因为公司最近再做这一块,本人原本对namespace和group的理解也不是很深入,总觉得公司的这个做法有问题,所以就网上看了不少文章,查阅了资料,算是有一些个人的看法,以飨诸位小伙伴。 网上那种不适合多项目、多环境的配置我们就不说了,我们只说适合生产的多项目、多环境的配置方式。 三、我的评论这里有一篇文章,讲解的不错,但是也未必是很准确。 https://blog.csdn.net/m0_54852680/article/details/122170936 ?在这篇文章中,我给出了我的看法,放在下面。
四、官网?我们看nacos官网的说法。 1.命名空间
?一句话:不同环境的配置的区分隔。 2.Data ID
?3.配置分组
?一句话:默认DEFAULT_GROUP,配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。 综合以上,我们得出结论: 通过namespace来区分不同的环境,通过group来区分不同的应用或组件或项目,通过DataID来区分不同的项目。 五、我的方案结合我对本文引用的那篇文章的评论,个人看法如下面的表格:
下面我们就这个表格做一个解读。 第一行是namespace,通过DEV/SIT/UAT/PRD来区分不同的环境,对应项目中nacos的namespace。在springboot2.6之前,nacos建议采用的是bootstrap.yml或bootstrap.properties方式进行nacos注册于发现的配置。 首先,在bootstrap.properties文件中指定环境
在springboot2.4之前是采用以上方式指定的,但是在springboot2.4(含)以后,采用这种方式是不生效的,而是更改为了:
然后,在bootstrap.properties文件中指定namespace和groupspring.cloud.nacos.discovery.namespace=${NACOS_NAMESPACE}spring.cloud.nacos.config.namespace=${NACOS_NAMESPACE}spring.cloud.nacos.config.group=${NACOS_GROUP:DEFAULT_GROUP} ?以上三个,分别指的是服务发现的namespace——也就是服务的namespace、配置中心的namespace、和配置的group。 前两者一般我们设为一样的即可,对应我们上面表格的DEV/SIT/UAT/PRD,以此来区分不同开发环境。 第三,我的做法我这里采用了${NACOS_NAMESPACE}的取值,是因为这个取值是在pom文件中自定义的,如下: ?如果你项目中有定义四个开发环境,写四个profile即可。这样就不用写多个properties文件了,不管是application.properties、application-dev.properties、application-sit.properties、application-uat.properties、application-prd.properties,或者是bootstrap.properties、bootstrap-dev.properties、bootstrap-sit.properties、bootstrap-uat.properties、bootstrap-prd.properties。 这两种多环境的配置文件,完全不需要了。通过pom文件中单 profiles标签定义多个profile——也就是多个环境,然后在bootstrap.properties中配置对应的profile环境,然后加上对应的服务注册与发现的配置即可。
六、注意事项1.namespace指的是id不是名称。?如果不指定id的话自动生成一段字符串,建议配置好id,这样在配置文件中也清楚,当前是哪个namespace。 2.取消了bootstrap另外,在最新版的spring boot上,bootstrap这种方式的配置被取消了,而是采用了application.yml或properties的方式。 版本对应关系:
以上是SCA官方给出的一个比较新的版本的对应关系。 以下内容来源官网 注意事项:? 完成以上步骤就能无缝切换到? 3.新特性及其使用支持 spring.config.import 这里假设有一个配置文件(
?这两个配置是等价的
? 注意事项:
The spring.config.import property is missing a nacos: entry Action: Add a spring.config.import=nacos: property to your configuration. If configuration is not required add spring.config.import=optional:nacos: instead. To disable this check, set spring.cloud.nacos.config.import-check.enabled=false. ?至此,关于新版本的改动的一些东西也说完了。 七、总结正如我们在给本文引用的一篇文章写的评论说的那样。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:09:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |