SpringBoot項目如何從Nacos配置中心動態讀取配置信息
1、項目中引入依賴
要從nacos中讀取配置,需要引入相關依賴。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2、檢查配置文件
首先要保證項目中的bootstrap.yml配置文件存在,且里面的配置正確。
注意:這里我使用的為.yml格式配置文件。且指定 spring.profiles.active=dev
如果你也使用的.yml格式,一定要在bootstrap.yml中指明 file-extension: yml
#bootstrap.yml
spring:
application:
name: application-test
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
#沒有使用命名空間的話,可以不用配置,默認為public
namespace: 5bfce986-3911-4699-a972-9e664841821b
3、確認nacos中配置文件名規則
${prefix}-${spring.profile.active}.${file-extension}
-
prefix 默認為
spring.application.name的值,也可以通過配置項spring.cloud.nacos.config.prefix來配置。 -
spring.profile.active即為當前環境對應的profile,詳情可以參考 Spring Boot文檔。 注意:當spring.profile.active為空時,對應的連接符-也將不存在,dataId 的拼接格式變成${prefix}.${file-extension} -
file-exetension為配置內容的數據格式,可以通過配置項spring.cloud.nacos.config.file-extension來配置。目前只支持properties和yml類型。
4、讀取配置
下面我們通過簡單的幾個步驟來讀取我們配置的yaml配置內容。
第一步:創建一個配置讀取的Controller
創建一個名為ConfigController的配置查詢控制器,並且類上配置@RequestMapping("/config")。
第二步:通過@Value注解讀取配置信息
我們在之前章節通過applicationContext#getEnvironment#getProperty方法可以直接獲取對應的Nacos Config的配置信息,當然SpringCloud Alibaba也同樣支持通過@Value注解來獲取配置信息,如下所示:
@RestController @RequestMapping(value = "/config") @RefreshScope public class ConfigController { /** * 讀取hengboy.name配置信息 */ @Value(value = "${hengboy.name:}") private String userName; /** * 讀取hengboy.age配置信息 */ @Value(value = "${hengboy.age:}") private String userAge; /** * 獲取配置內容 * * @return */ @RequestMapping(value = "/get") public String getConfig() { return userName + ":" + userAge; } }
解釋:${hengboy.name:}表示需要從全局的配置內容中讀取hengboy.name的配置信息,如果沒有找到則使用 冒號(:) 后的內容,當然這里我們沒有添加任何的默認值,如果沒有配置則為空字符串。
第三步:通過@RefreshScope注解實時刷新配置信息
我們在ConfigController控制器上添加了注解@RefreshScope主要目的是來實時同步通過Nacos Console修改的配置內容。
@RefreshScope注解是SpringCloud內部提供,在需要配置熱更新的配置bean上加springCloud的動態加載配置。
@RefreshScope可用在類上也可用在方法上,當用在方法上時,如果是想加載配置bean中使用前綴注入的屬性時(@ConfigurationProperties(prefix = “web.test”)),任然會不能實時的動態更新,配置bean中使用@Value注入的屬性可實現動態更新。
第四步:運行測試
啟動應用程序,我們通過curl http://localhost:8080/config/get可以獲取我們在Nacos Console添加的配置內容:admin:25
第五步:實時更新測試
通過Nacos Console我們修改下兩個參數的內容並且重新發布配置信息:
hengboy.name : admin -> admin-change-after hegnboy.age : 25 -> 30
再次通過curl http://localhost:8080/config/get命令訪問,我們已經可以得到更新后的配置內容:admin-change-after:30
