配置中心 Nacos 不同環(huán)境的配置管理方案
點擊上方?泥瓦匠?關(guān)注我!
老家浙江東海邊,靠海吃海,目前經(jīng)營一個小品牌,讓普通人吃到最新鮮的海鮮。有興趣可以點擊了解:《浙里有漁,鮮人一步!》???
本文探討?Nacos?作為配置中心,如何實現(xiàn)不同環(huán)境(開發(fā)、測試、灰度、正式)的配置管理問題。

由此,實現(xiàn)多環(huán)境配置的方案也有三種:
1、用命名空間(namespace)來區(qū)分不同的環(huán)境,一個命名空間對應(yīng)一個環(huán)境;
2、用配置組(group)來區(qū)分不同的環(huán)境,命名空間用默認的public即可,一個組對應(yīng)一種環(huán)境;
3、用配置集ID(Data ID)名稱來區(qū)分不同的環(huán)境,命名空間和組用默認的即可,通過文件命名來區(qū)分;
接下來,逐個來看
http://{host}:{port}/nacos
http://{host}:{port}/nacos/index.html
默認用戶名密碼都是nacos

為了方便演示,這里建了一個名為example的Spring Boot項目:

pom.xml
?1?"1.0"?encoding="UTF-8"?>
?2?"http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?3??????????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?https://maven.apache.org/xsd/maven-4.0.0.xsd">
?4?????4.0.0
?5?????
?6?????????org.springframework.boot
?7?????????spring-boot-starter-parent
?8?????????2.3.6.RELEASE
?9????????? ?
10?????
11?????com.example
12?????example
13?????0.0.1-SNAPSHOT
14?????example
15?
16?????
17?????????1.8
18?????????2.2.3.RELEASE
19?????
20?
21?????
22?????????
23?????????????org.springframework.boot
24?????????????spring-boot-starter-web
25?????????
26?????????
27?????????????com.alibaba.cloud
28?????????????spring-cloud-starter-alibaba-nacos-config
29?????????
30?????
31?
32?????
33?????????
34?????????????
35?????????????????com.alibaba.cloud
36?????????????????spring-cloud-alibaba-dependencies
37?????????????????${spring-cloud-alibaba.version}
38?????????????????<type>pomtype>
39?????????????????import
40?????????????
41?????????
42?????
43?
44?????
45?????????
46?????????????
47?????????????????org.springframework.boot
48?????????????????spring-boot-maven-plugin
49?????????????
50?????????
51?????
52?
53?
bootstrap.yml
spring:
??application:
????name:?example
??cloud:
????nacos:
??????config:
????????server-addr:?192.168.100.10:8848
????????file-extension:?yaml
Spring Boot 基礎(chǔ)不介紹了,不會的推薦看下這個教程:
https://github.com/javastacks/spring-boot-best-practice
HelloController.java
package?com.example.controller;
import?org.springframework.beans.factory.annotation.Value;
import?org.springframework.cloud.context.config.annotation.RefreshScope;
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
/**
?*?@author?ChengJianSheng
?*?@data?2020/11/19
?*/
@RestController
@RequestMapping("/hello")
@RefreshScope
public?class?HelloController?{
????@Value("${greet.hello}")
????private?String?greet;
????@GetMapping("/sayHi")
????public?String?sayHi()?{
????????return?greet;
????}
}
1、利用 Data ID 命名 來區(qū)分環(huán)境
利用Data ID命名來區(qū)分環(huán)境,命名空間和組默認即可。
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
?${prefix}-${spring.profiles.active}.${file-extension}
prefix 默認為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix來配置 spring.profiles.active 即為當前環(huán)境對應(yīng)的 profile,詳情可以參考 Spring Boot文檔。注意:當 spring.profiles.active 為空時,對應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成?{file-extension} file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。





用命令行啟動也是一樣的:

例如:
java?-Dspring.profiles.active=test?-jar?example-0.0.1-SNAPSHOT.jar

2、利用 Group 來區(qū)分環(huán)境
項目不變,我們把spring.application.name改成example2
命名空間用默認的public



java?-Dspring.cloud.nacos.config.group=DEV_GROUP?-jar?example-0.0.1-SNAPSHOT.jar

java?-Dspring.cloud.nacos.config.group=TEST_GROUP?-jar?example-0.0.1-SNAPSHOT.jar

java?-Dspring.profiles.active=test?-Dspring.cloud.nacos.config.group=TEST_GROUP?-jar?example-0.0.1-SNAPSHOT.jar
如果是這樣的話,這個時候,Data ID 命名就應(yīng)該是 example2-test.yaml
3、利用 Namespace 區(qū)分環(huán)境

創(chuàng)建命名空間的時候,如果不指定ID,則自動生成的id就是這樣的uuid字符串,我們還是自己指定一個有意義的ID吧







java?-Dspring.cloud.nacos.config.namespace=ns_dev?-jar?example-0.0.1-SNAPSHOT.jar

java?-Dspring.profiles.active=dev?-Dspring.cloud.nacos.config.namespace=ns_dev?-jar?example-0.0.1-SNAPSHOT.jar

java?-Dspring.cloud.nacos.config.namespace=ns_test?-jar?example-0.0.1-SNAPSHOT.jar

java?-Dspring.profiles.active=test?\
?????-Dspring.cloud.nacos.config.namespace=ns_test?\
?????-Dspring.cloud.nacos.config.group=TEST_GROUP?\
?????-jar?example-0.0.1-SNAPSHOT.jar

4、小結(jié)
第一種,用 Data ID 區(qū)分環(huán)境,雖然簡單,但是每個項目要創(chuàng)建4個配置文件,隨著項目的增多,都在一個命名空間下回顯得很混亂,查找起來也不是很方便,而且不利于做權(quán)限控制
第二種,用Group區(qū)分,問題也是一樣的
綜上,最好的是用Namespace區(qū)分環(huán)境,清晰明了,而且有利于做權(quán)限控制
https://nacos.io/zh-cn/docs/concepts.html

老家浙江東海邊,靠海吃海,目前經(jīng)營一個小品牌,讓普通人吃到最新鮮的海鮮。有興趣可以點擊了解:《浙里有漁,鮮人一步!》???
往期推薦
下方二維碼關(guān)注我

技術(shù)草根,堅持分享?編程,算法,架構(gòu)
