工作中的点点滴滴-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 的时候可以启动成功,并且能够成功的获取到数据了。

 

posted @ 2021-11-11 22:04  小杨ABC  阅读(891)  评论(0编辑  收藏  举报