之前已經學習了使用Nacos作為注冊中心,這一節學習Nacos另外一個核心功能:配置中心
。
一,Nacos配置中心簡介
Nacos是一個易于使用的平臺,用于動態服務發現和配置管理。作為配置中心,Nacos提供了以下核心功能和優勢:
-
動態配置管理:Nacos允許用戶在不重啟服務的情況下動態地修改和推送配置信息,實現配置的實時更新。
-
配置集中存儲:Nacos提供了一個中心化的配置存儲,使得配置信息易于管理和維護,避免了配置分散在不同環境和系統中的問題。
-
配置版本控制:Nacos支持配置的版本控制,可以追蹤配置的變更歷史,方便進行回滾操作。
-
配置共享:Nacos允許跨服務共享配置,提高配置的復用性,減少冗余。
-
配置隔離:通過命名空間(Namespace)的概念,Nacos支持不同環境(如開發、測試、生產)的配置隔離,確保環境間的配置不會相互干擾。
-
配置監聽和推送:Nacos提供了配置監聽功能,當配置發生變化時,可以主動推送更新到客戶端,實現配置的熱更新。
-
安全性:Nacos支持配置的訪問控制和權限管理,確保只有授權用戶才能訪問或修改配置。
-
多環境支持:Nacos支持多種部署環境,可以滿足不同規模和需求的配置管理。
-
與Spring Cloud集成:Nacos與Spring Cloud緊密集成,提供了spring-cloud-starter-alibaba-nacos-config等組件,簡化了在Spring Cloud應用中使用Nacos配置中心的過程。
-
易用性:Nacos提供了友好的用戶界面,使得配置的查看、修改和管理變得直觀簡單。
Nacos作為配置中心,適用于微服務架構、云原生應用以及需要動態配置管理的分布式系統。通過集中管理配置,Nacos幫助企業提高了配置管理的效率和安全性,同時也簡化了開發和運維的工作。
二,Nacos配置中心的使用說明
使用說明在官方文檔上有詳細記錄,點擊查看文檔https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html。
1,聲明對配置中心的Maven依賴
要使用配置中心首先要添加依賴。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在谷粒商城這個項目中,因為所有服務都要使用Nacos配置中心,所以在common模塊添加這個依賴
2,在 bootstrap.properties 中配置 Nacos server 的地址和應用名
在工程或者模塊的resource目錄下,bootstrap.properties問中聲明Nacos服務器的地址和服務名稱。
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon
3,在Nacos配置列表界面創建配置文件
點擊創建配置后,會有如下頁面。
- ① Data ID相當于文件名,要包含服務名,比如gulimall-coupon.properties
- ② 配置文件類型,支持多種,對于微服務來講,一般是yaml或者properties
- ③ 黑色框內是要填充的配置信息
在 Nacos Spring Cloud
中,Data Id
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默認為spring.application.name
的值,也可以通過配置項spring.cloud.nacos.config.prefix
來配置。spring.profiles.active
即為當前環境對應的profile
,詳情可以參考 Spring Boot文檔。 注意:當spring.profiles.active
為空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成${prefix}.${file-extension}
file-exetension
為配置內容的數據格式,可以通過配置項spring.cloud.nacos.config.file-extension
來配置。目前只支持properties
和yaml
類型。
三,測試
1,把配置信息放在工程里
我們先把信息放在工程的配置文件中,在coupon模塊的配置文件application.properties中配置如下信息:
coupon.user.name=lcy
coupon.age=22
2,編寫測試代碼
在Controller中增加一個方法,使用配置文件中的配置信息。
@Value("${coupon.user.name}")private String userName;@Value("${coupon.user.age}")private String userAge;@RequestMapping("test")public R test(){return R.ok().put("name", userName).put("age", userAge);}
注意上述代碼,我們是通過注解@Value將配置文件中的配置注入到類變量中,然后在方法中引用。
3,測試
啟動服務后,在瀏覽器中輸入以下地址。
http://localhost:7000/coupon/coupon/test
輸出如下,說明已經讀取了配置文件中的信息。
4,把配置信息配置到配置中心
以優惠券服務為例進行配置。
點擊配置文件列表右側編輯按鈕,進入編輯界面。
注意,為了弄清楚配置中心配置文件和本地配置文件的區別和聯系,我們沒有刪除上一步本地的配置。
目前僅在配置中心配置了一項配置,這項配置在本地配置中也有,但值不一樣,本地配置是coupon.user.name=lcy
,配置中心是coupon.user.name=lcy2
。
重啟服務后刷新瀏覽器,結果如下。
顯然,name的值取自配置中心,而不是本地配置文件,說明配置中心的值會覆蓋本地配置文件的值。
錯誤記錄
谷粒商城配置中心錯誤記錄