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