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 ...
随机推荐
- .netcore微服务-Mycat
1.前言 1.1 分布式数据库 随着IT行业的迅猛发展,行业应用系统的数据规模呈现爆炸式增长,对数据库的数据处理能力要求越来越高,分布式数据库正是因此应运而生. 分布式数据库特点包括: 透明性: ...
- [HAOI2006]聪明的猴子 题解
题意: 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在 ...
- Error:Some file crunching failed, see logs for details
Information:Gradle tasks [:myapp2:assembleDebug] Error:Some file crunching failed, see logs for deta ...
- linux初学者-系统日志(二)
linux初学者-系统日志(二) 先前在(一)中介绍到在不同主机间日志同步的方法,在一台主机上可以看到另一台主机的日志.这里会介绍系统日志方面的一些其他内容. 1.日志的采集格式 在日志的采集中,由图 ...
- JNDI总结(一)
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Conn ...
- springBoot-mongodb
作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权归作者所有,转载请注明出处 mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到 ...
- Linux中bash shell环境变量
别名 别名是命令的快捷方式.为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用.语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令.重要的 ...
- CentOS 配置阿里云 NTP 服务
NTP 是网络时间协议(Network Time Protocol),NTP 服务能保证服务器的本地时间与标准时间同步. ▶ 配置时区信息 1.删除系统里的当地时间链接 sudo rm /etc/lo ...
- 【经验分享】ASP.NET 的 Page_Load 执行了2次,真的!
发现问题 这是来自一位网友的提问: 本着求真务实的态度,我打开了 AppBoxPro 项目,本地调试果然发现 Page_Load 进入了两次! 其实在没测试之前,我就有了大概的方向,因为AppBoxP ...
- sentos中bonding(网卡绑定技术)1
一.GRUB添加kernel参数 1.# vim /etc/sysconfig/grubGRUB_CMDLINE_LINUX="...... net.ifnames=0" ...