SpringBoot項目如何從Nacos配置中心動態讀取配置信息


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM