多環境的配置隔離是配置中心最基礎的一個功能之一。不同的環境配置的值不一樣,比如數據庫的信息,業務的配置等。
Spring Boot 多環境配置
首先我們來回顧下在Spring Boot中用配置文件的方式怎么進行環境的隔離。
默認我們都會創建一個application.properties配置文件,這個文件是不區分環境的,通用。
為了區分環境我們可以為每個環境創建一個配置文件,比如;
- 開發環境
application-dev.properties - 測試環境
application-test.properties
在項目部署的時候可以通過 spring.profiles.active=dev 來激活開發環境的配置,通過 spring.profiles.active=test 來激活測試環境的配置。
Apollo 多環境配置
既然講到配置中心,那么我會已目前已經比較成熟的Apollo來進行一個對比,把一些相同的或者不同的點都分析出來,這樣大家在選型的時候也能有個參考。
Apollo的多環境配置是在搭建的時候需要制定好目前支持多少個環境,每個環境下可以分不同的集群,集群這個是可以動態創建的。
選擇不同的環境,進行配置的操作,改動的就是這個環境下的配置。
在客戶端接入的時候,通過指定env來獲取對應環境下的配置,還有一點就是Apollo中每個環境的配置都是用DB來隔離的,每個環境都有自己的一個ConfigDB。
Nacos 多環境配置
Namespace用於進行租戶粒度的配置隔離。不同的命名空間下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。
以上是官方對Nacos Namespace的介紹,如果用過Apollo的同學應該知道,在Apollo中的Namespace是配置文件的概念,跟Nacos的概念定義相差太大了。
而Nacos中配置文件的定義則是Data ID,在學任何一個框架的時候,首先要搞懂的就是它本身的一些概念。
在Nacos中要實現多環境的隔離,也就是說我們需要創建多個Namespace。
Nacos的最后一個菜單,名稱為:命名空間,點進去我們可以看到下面的列表,可以去創建你想要的空間:
public是默認的,我們創建了一個dev環境,這個時候會生成一條數據,我們需要關注的是命名空間ID,為了防止命名空間名稱沖突,在保存后會自動生成一個ID,項目中在指定當前環境的時候需要傳空間ID,而不是空間名稱。
創建空間后,在配置列表的頁面上邊我們可以選擇不同的空間來進行切換。然后在對應的空間下創建配置。
最后在我們的項目中,我們是以Spring Boot來進行講解的,就在application.properties中指定當前項目的空間值即可:
nacos.config.namespace=334139e6-d700-4a7b-ae0d-5ae30abd94a8
最好的方式是在部署的時候,通過參數傳遞,如果你直接寫在項目中,那么上線的時候是不是還得修改這個namespace為線上的namespace id。
Apollo在這塊是這樣設計的,環境可以配置在磁盤中的配置文件中,就相當於一台機器配置一個環境,那么這台機器上的應用就都是這個環境了,環境跟着機器走,不跟項目走。