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
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](http://127.0.0.1:9980/getValue) 返回:这里是DEV命名空间
将namespace配置为`TEST`的ID:`0133bd1e-25c3-4985-96ed-a4e34efdea2e`,启动进行测试
访问 [http://127.0.0.1:9981/getValue](http://127.0.0.1:9981/getValue) 返回:这里是TEST命名空间
通过指定namespace的方式启动,均可读取到对应的启动端口和相关配置
## 说明
Namespace是官方推荐的环境隔离方案,确实有他的独到之处,使用namespace这种方案,同时可以与DataID+profile的方式结合
同时释放Group的限制,大大提高多环境配置管理的灵活性。
# 总结
通过上面三种方案的介绍,想必大家对于多环境下的配置读取方式应该有所选择
* DataID: 适用于项目不多,服务量少的情况。
* Group:实现方式简单,但是容易与DataID方案发生冲突,仅适合于本地调试
* Namespace:实现方式简单,配置管理简单灵活,同时可以结合DataID共同使用,推荐这种方案
版权归原作者 Wis57 所有, 如有侵权,请联系我们删除。