工作中的點點滴滴-Nacos配置中心的無法獲取到數據


背景:

  新的一個項目使用Nacos做為數據配置中心,在開發過程中通常會將一些需要變更的參數、變量等從代碼中分離出來獨立管理,以獨立的配置文件的形式存在。目的是讓靜態的系統工件或者交付物(如 WAR,JAR 包等)更好地和實際的物理運行環境進行適配。配置管理一般包含在系統部署的過程中,由系統管理員或者運維人員完成這個步驟。配置變更是調整系統運行時的行為的有效手段之一。Nacos可以作為配置中心,存儲和管理配置信息。首先相比較apollo和zk,他更加的輕量級,並且也同時支持集群模式來保證高可用。

  項目使用的是Spring Boot框架,版本是2.4.10的。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.10</version>
    <type>pom</type>
</dependency>

  然后Nacos的依賴使用的是boot,這里需要注意區分一下boot和cloud的兩個jar包。因為我們的項目中是沒有明顯以來spring cloud的。所以為了避免boot-starter和cloud同時加載一些bean導致亂七八糟的問題,我們這里就采用的是com.alibaba.boot,版本是0.2.10的。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.10</version>
</dependency>

  然后yml配置如下

nacos:
  config:
    server-addr: 127:0:0:1:8848

 啟動程序

@SpringBootApplication
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosTestApplication.class, args);
    }
}

獲取值

@Controller
@RequestMapping("config")
public class ConfigController {
    @NacosValue(value = "${username:false}", autoRefreshed = true)
    private String username;

    @GetMapping(value = "/get")
    @ResponseBody
    public String get() {
        return username;
    }
}

 

  項目啟動失敗

 

 在spring boot 2.4之后刪掉了ConfigurationBeanFactoryMetadata。在項目啟動的時候創建Bean失敗。所以這里我就直接把spring-boot的版本降低到了2.3.9。然后再次啟動就成功了。

  啟動成功之后,但是獲取配置總是返回的是Null,這個其實也是boot的版本和Nacos的版本不一致導致的,所以我就一路把Nacos的版本從0.2.10降低到0.2.1 的時候可以啟動成功,並且能夠成功的獲取到數據了。

 


免責聲明!

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



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