問題 - 多環境多項目管理
問題1:
實際開發中,通常一個系統會准備
- dev開發環境
- test測試環境
- prod生產環境。
如何保證指定環境啟動時服務能正確讀取到Nacos上相應環境的配置文件呢?
問題2:
一個大型分布式微服務系統會有很多微服務子項目,每個微服務項目又都會有相應的開發環境、測試環境、預發環境、正式環境…那怎么對這些微服務配置進行管理呢?
Nacos的圖形化管理界面
POM
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基礎配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
YML
Nacos同springcloud-config一樣,在項目初始化時,要保證先從配置中心進行配置拉取,拉取配置之后,才能保證項目的正常啟動。
springboot中配置文件的加載是存在優先級順序的,bootstrap優先級高於application
- bootstrap
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服務注冊中心地址
config:
server-addr: localhost:8848 #Nacos作為配置中心地址
file-extension: yml #指定yaml格式的配置
group: DEV_GROUP
#namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
- application
spring:
profiles:
active: dev # 表示開發環境
#active: test # 表示測試環境
#active: info
在Nacos中添加配置信息
Nacos中的dataid的組成格式及與SpringBoot配置文件中的匹配規則
官方文檔
說明:之所以需要配置spring.application.name,是因為它是構成Nacos配置管理dataId 字段的一部分。
在 Nacos Spring Cloud中,dataId的完整格式如下:
\({prefix}-\){spring-profile.active}.${file-extension}
- prefix默認為spring.application.name的值,也可以通過配置項spring.cloud.nacos.config.prefix來配置。
- spring.profile.active即為當前環境對應的 profile,詳情可以參考 Spring Boot文檔。注意:當spring.profile.active為空時,對應的連接符 - 也將不存在,datald 的拼接格式變成\({prefix}.\)
- file-exetension為配置內容的數據格式,可以通過配置項spring .cloud.nacos.config.file-extension來配置。目前只支持properties和yaml類型。
- 通過Spring Cloud 原生注解@RefreshScope實現配置自動更新。
最后公式:
\({spring.application.name)}-\){spring.profiles.active}.${spring.cloud.nacos.config.file-extension}