參考感謝
前言
前景回顧:
- 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!