背景:
新的一个项目使用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 的时候可以启动成功,并且能够成功的获取到数据了。