Nacos(五):多环境下如何“读取”Nacos中相应的配置
参考感谢
前言
前景回顾:
- Nacos(四):SpringCloud项目中接入Nacos作为配置中心
- Nacos(三):Nacos与OpenFeign的对接使用
- Nacos(二):SpringCloud项目中接入Nacos作为注册中心
通过前面几篇介绍,已经基本了解了Nacos做为注册中心和配置中心的基本用法。
在实际开发中,通常一个系统会准备开发环境、测试环境、预发环境、正式环境
那么如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢
本文主要对Nacos作为配置中心时,如何对多环境配置文件进行读取进行论述。
我的环境
- Windows10
- JDK8
- SpringCloud:Finchley.RELEASE
- SpringBoot:2.0.4.RELEASE
- spring-cloud-alibaba-dependencies:0.2.2.RELEASE
- Nacos-server:1.0.1
本文的项目Demo继续沿用 Nacos(四)中的工程nacos-config,若小伙伴还没有之前的环境,可至源码地址中下载
Data ID方案
在上一篇文章中有对Data ID进行过介绍,它的命名规则为:${prefix}-${spring.profile.active}.${file-extension}
通过其中的spring.profile.active属性即可进行多环境下配置文件的读取
一起来试一下吧~
新建配置
1、启动Nacos-Server后,创建配置文件Data ID为:nacos-config-dev.yml, 其配置如下:
server:
port: 9980
nacos:
config: 这里是dev环境
2、继续创建配置文件Data ID为:nacos-config-test.yml, 其配置如下:
server:
port: 9981
nacos:
config: 这里是test环境
多环境测试
通过Idea启动nacos-config项目,并指定spring.profiles.active,通过不同的环境进行启动

通过上面的配置,将项目分为dev、test两个环境启动后,进行测试
访问 http://127.0.0.1:9980/getValue 返回:这里是dev环境
访问 http://127.0.0.1:9981/getValue 返回:这里是test环境
可以看到,分别以dev、test启动后相应的读取到不同的配置,dev环境读取到启动端口为9980,test读取到启动端口9981
Group方案
上面介绍了通过指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
这里也可以不用DataID,直接通过Group实现环境区分
注:这种方式不太推荐,切换不灵活,需要切换环境时要改Gruop配置
新建配置
1、创建配置文件Data ID为:nacos-config.yml, Group为:DEV_GROUP, 其配置如下:
server:
port: 9980
nacos:
config: 这里是dev环境
2、继续创建配置文件Data ID为:nacos-config.yml, Group为:TEST_GROUP, 其配置如下:
server:
port: 9981
nacos:
config: 这里是test环境
这里的两个配置文件他们的DataID相同但是Group不同
修改项目中的配置文件bootstrap.yml
在config下增加一条group的配置,指定配置文件所在的group,可配置为DEV_GROUP或TEST_GROUP
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
group: DEV_GROUP
启动测试
将group配置为DEV_GROUP启动进行测试
访问 http://127.0.0.1:9980/getValue 返回:这里是dev环境
将group配置为TEST_GROUP启动进行测试
访问 http://127.0.0.1:9981/getValue 返回:这里是test环境
通过指定group的方式启动,DEV_GROUP读取到启动端口为9980,TEST_GROUP读取到启动端口9981
说明
只通过Group来进行多环境的区分的方式我不推荐使用,因为涉及到了多环境自然就会改变spring.profile.active,而profile一旦生效,配置文件就会依据DataID的规则进行查找。所以Group的方式仅作参考。
Group的合理用法应该是配合namespace进行服务列表和配置列表的隔离和管理
Namespace方案
Namespace命名空间进行环境隔离也是官方推荐的一种方式。Namespace的常用场景之一是不同环境的配置的区分隔离,例如:开发测试环境和生产环境的资源(如配置、服务)隔离等。
创建命名空间
创建命名空间DEV和TEST,不同的命名空间会生成相应的UUID,如下图

新建配置文件
1、在命名空间DEV下创建DataID为:nacos-config.yml,Group为默认值的配置,配置如下:
server:
port: 9980
nacos:
config: 这里是DEV命名空间
2、在命名空间TEST下创建DataID为:nacos-config.yml,Group为默认值的配置,配置如下:
server:
port: 9981
nacos:
config: 这里是TEST命名空间
修改项目中的配置文件bootstrap.yml
在config下增加一条namespace的配置,指定当前配置所在的命名空间ID。注意是命名空间ID!!!!配置如下
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
启动测试
将namespace配置为DEV的ID:edbd013b-b178-44f7-8caa-e73071e49c4d,启动进行测试
访问 http://127.0.0.1:9980/getValue 返回:这里是DEV命名空间
将namespace配置为TEST的ID:0133bd1e-25c3-4985-96ed-a4e34efdea2e,启动进行测试
访问 http://127.0.0.1:9981/getValue 返回:这里是TEST命名空间
通过指定namespace的方式启动,均可读取到对应的启动端口和相关配置
说明
Namespace是官方推荐的环境隔离方案,确实有他的独到之处,使用namespace这种方案,同时可以与DataID+profile的方式结合
同时释放Group的限制,大大提高多环境配置管理的灵活性。
总结
通过上面三种方案的介绍,想必大家对于多环境下的配置读取方式应该有所选择
- DataID: 适用于项目不多,服务量少的情况。
- Group:实现方式简单,但是容易与DataID方案发生冲突,仅适合于本地调试
- Namespace:实现方式简单,配置管理简单灵活,同时可以结合DataID共同使用,推荐这种方案
- 文章作者: LarsCheng
- 文章链接: 本文首发于个人博客:https://www.larscheng.com/nacos-namespace/
- 发布方式:OpenWrite 最懂你的科技自媒体管理平台
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LarsCheng's Blog!
Nacos(五):多环境下如何“读取”Nacos中相应的配置的更多相关文章
- (转 留存)Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤
Windows环境下的NodeJS+NPM+GIT+Bower安装配置步骤 标签: NodeJSnpmbower 2015-07-17 16:38 3016人阅读 评论(0) 收藏 举报 分类: G ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- Windows环境下在IDEA编辑器中spark开发安装步骤
以下是windows环境下安装spark的过程: 1.安装JDK(version:1.8.0.152) 2.安装scala(version:2.11/2.12) 3.安装spark(version:s ...
- linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):
Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置 ...
- Linux环境下Gitblit服务搭建及秘钥配置
一.安装gitblit服务 1.下载地址 https://pan.baidu.com/s/1wQ3TEE_gw5xZvyFPZB9xFg 2.上传至linux服务器并解压缩 tar xvf gitbl ...
- 分享一个linux环境下快速读取行数的命令
最初是因为我需要计算一天的日志行数,如果用传统意义上的cat a.log |wc -l的话因为是单线程,所以需要计算半小时的样子,后来同组的小伙伴教了我一个方法可以有效提高计算速度,将计算时间减半. ...
- linux环境下java读取sh脚本并执行
Process process; String cmd = "/home/ty/t.sh";//这里必须要给文件赋权限 chmod u+x fileName; ...
- SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...
- SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清楚的认识到以下的问题,在实际的项目开发之中,尤其是 Java 的 MVC ...
随机推荐
- 为什么说是时候拥抱.NET CORE了?
微软和社区已经做了大量艰苦的工作,使.Net Core成为市场上具有竞争力的框架,帮助开发人员快速开发具有最佳性能和可扩展性的强大应用程序.做的最棒的事情是.Net Framework开发人员不需要任 ...
- 后端 - Lession 01 PHP 基础
目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...
- 分组在re模块中的使用以及使用正则表达式的技巧
1.split:切割 使用split不会返回被切割的字符 import re ret = re.split("\d+","5as46asf46asf46a") ...
- Java oop 多态
1.多态指对象的多种形态:引用多态与方法多态 注意: A:继承是多态的实现基础 B:方法重写也是多态的体现 2.引用多态 A:父类的引用可以指向本类的对象:父类 对象名 = new 父类( ...
- bean的创建(五)第三部分 bean工厂方法参数的解析
准备好一系列参数之后,开始参数类型的转换,方法参数的对应. ConstructorResolver.createArgumentArray private ArgumentsHolder create ...
- Linux文件系统损坏导致无法正常启动与fsck修复工具
今天在打开自己的虚拟机学习的时候,发现在文件系统检查过程中出现以下的报错: /dev/mapper/VolGroup-lv_root:UNEXPECTED INCONSISTENCY;RUN fsck ...
- Prometheus 整合 AlertManager
简介 Alertmanager 主要用于接收 Prometheus 发送的告警信息,它很容易做到告警信息的去重,降噪,分组,策略路由,是一款前卫的告警通知系统.它支持丰富的告警通知渠道,可以将告警信息 ...
- 【iOS】获取视图的中心和宽高
示例代码: NSLog(@"%f, %f", self.view.center.x, self.view.center.y); NSLog(@"%f, %f", ...
- MyBatis框架之关联查询
概述:关联查询主要在<resultMap>元素中,用<association>配置一对一.用<collection> 配置一对多 一.一对一查询 1.使 ...
- .Net Core CLR FileFormat Call Method( Include MetaData, Stream, #~)
.Net Core CLR PE 文件启动方法,找到函数入口点,调用整个.Net 程式宿主. 使用方法:可以利用Visual Studio新建一个控制台应用程序,然后生成DLL,替换掉本程序DLL, ...