最近使用spring-boot集成Nacos,根据官网文档的提示走,properties配置读取,更新正常。配置yaml就读取不到,最后才发现问题。

  • 前置环境:没用最新的springboot版本,其他的web依赖就不贴了,贴主要的。Nacos 为2.0.3的服务

      		<groupId>org.springframework.boot</groupId>
          	<artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
              
            <!-- nacos 配置依赖 -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-config-spring-boot-starter</artifactId>
                <version>0.2.1</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-config-spring-boot-actuator</artifactId>
                <version>0.2.1</version>
            </dependency>
            <!-- 注册服务依赖-->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-discovery-spring-boot-starter</artifactId>
                <version>0.2.1</version>
            </dependency>
    
  • 使用以上依赖,进行集成,最后出现了配置中心配置不能读取的问题。下图在配置中心配置的yaml,程序中,name这些只有一个节点的配置可读取到,读取spring.redis.host多节点配置读取不到。

    在这里插入图片描述

    在这里插入图片描述

  • 怎么解决?
            以下代码是请求Nacos服务,获取配置文件的open api,同时也是Nacos集成到项目后,启动加载配置文件的调用接口,点进去打个断点debug启动。
             追踪到AbstractNacosPropertySourceBuilder.class 类中的doBuild method,NacosPropertySource nacosPropertySource = new NacosPropertySource(dataId, groupId, name, nacosConfig, type); 这里是返回资源初始化的方法,查看nacosPropertySource 对象,你会发现spring.redis.host这种多节点,被拆分成<spring,””><redis,””><host,“value”>这种形式进行返回,因此{spring.redis.host}在取值时取不到,当然,直接{host}能取到,但没鸟用。
             只有当以以下图片2中的形式进行返回的时候才能被读取<spring.redis.host ,value>

    // 访问nacos
    ConfigService configService = NacosFactory.createConfigService("127.0.0.1:8848");
    // 通过DataId和Group获取配置文件内容
    String contentInfo = configService.getConfig("test.yaml","DEFAULT_GROUP",1000L);
    

    yml被解析成这样的时候,唉
    在这里插入图片描述

    在这里插入图片描述

  • 发现问题了,怎么解决?
           (人家的jar包)我也解决不了,狗头保命,当然强悍的小伙伴可以下载源码,改了自己引用(开源项目)。
            解决不了,就只能跳过啊,Nacos的依赖包全部改成0.2.6版本。不知道是不是最新的包改了这个bug,还是因为其他版本包不兼容导致的。

        
	        <!-- nacos 配置依赖 -->
	        <dependency>
	            <groupId>com.alibaba.boot</groupId>
	            <artifactId>nacos-config-spring-boot-starter</artifactId>
	            <version>0.2.6</version>
	        </dependency>
	
	        <dependency>
	            <groupId>com.alibaba.boot</groupId>
	            <artifactId>nacos-config-spring-boot-actuator</artifactId>
	            <version>0.2.6</version>
	        </dependency>
	        <!-- 注册服务依赖-->
	        <dependency>
	            <groupId>com.alibaba.boot</groupId>
	            <artifactId>nacos-discovery-spring-boot-starter</artifactId>
	            <version>0.2.6</version>
	        </dependency>

版权声明:本文为loney_wolf原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/loney_wolf/article/details/120305171