背景:
新的一個項目使用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 的時候可以啟動成功,並且能夠成功的獲取到數據了。