如何解决无法获取到Nacos配置中心的配置问题

 更新时间:2025年06月07日 08:43:46   作者:lukamao  
这篇文章主要介绍了如何解决无法获取到Nacos配置中心的配置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

引言

最近在学习 Spring Cloud Alibaba,用到了 Nacos 配置中心。

Nacos 是 Spring Cloud Alibaba 中的一个组件,通常用作服务注册中心以及配置中心。

问题复现

项目中有一个如图所示的消息模块:

在 application.yml 中做了如下配置:

spring:
  application:
    name: message
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: DEFAULT_GROUP

主要配置了服务的名称、Nacos 注册中心的地址、配置文件的后缀名以及组的名称,我在 Nacos 注册中心上做了如下配置:

Nacos 默认会在启动的时候去配置中心上读取名为

${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} 

的配置文件,但是在启动的时候报了如下的错误:

意思是 Spring Boot 项目启动失败,url 属性未指定,DataSource 创建失败。

这里有一个小插曲:在高版本的 Spring Boot 中,默认是要创建 DataSource 的,否则无法启动,我们可以在 Spring Boot 的主启动类的 @SpringBootApplication 上加一个参数,排除掉 DataSourceAutoConfiguration,如下所示:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

}

但是,在这个服务中,我们是需要配置数据源,并且已经配置了数据源的,为什么会启动失败呢?

问题排查

关于排查问题,我们首先要做的就是看日志,先看控制台输出:

我们发现程序首先会去配置中心上加载名为 message 和 message.properties 的配置文件,读到这里大家会不会有点奇怪,我们配置的后缀名明明是 yaml,为什么会去读 message.properties 呢?带着这个疑问,请继续往下读。

如果让我去设计一个注册中心的话,在程序启动的时候,我会首先解析出配置文件,找到注册中心的地址,恰恰 Nacos 也是这样做的。如果你有一定的源码阅读功底的话,你应该会很快的找到 Nacos 里面的 NacosPropertySourceBuilder 类,里面有个 build 方法。没错,这个类就是用来解析配置文件,构造 NacosPropertySource 对象的,我们在这个方法的第一行上打上断点,以 Debug 模式运行,发现这个断点一共运行了两次,两次的对象的值如下:

我们发现,这与日志里的值一样,并且并没有解析我们的配置文件,采用的是默认的配置,为什么会这样呢?

问题解决

我们把配置文件名改为 bootstrap.yml,再次运行。

我们可以看到项目正常启动了!

总结

这是一个非常细节的问题,我原先以为我们把 Nacos 的配置信息写在默认的 application.yml 文件中就可以加载,但是事实并非如此,Nacos 的配置信息必须写在 bootstrap.properties 或者 bootstrap.yml 文件中,以后要多加注意!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SharedWorkerGlobalScope属性数据共享示例解析

    SharedWorkerGlobalScope属性数据共享示例解析

    这篇文章主要为大家介绍了SharedWorkerGlobalScope属性数据共享示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java双向链表的操作

    Java双向链表的操作

    这篇文章主要介绍了Java双向链表的操作,双向链表,对于该链表中的任意节点,既可以通过该节点向前遍历,也可以通过该节点向后遍历,双向链表在实际工程中应用非常广泛,是使用链表这个结构的首选
    2022-06-06
  • 详解一个简单的Servlet容器的设计与实现

    详解一个简单的Servlet容器的设计与实现

    Servlet算是Java Web开发请求链路调用栈中底层的一个技术,而了解一个Servlet容器的实现有助于更好的理解JavaWeb开发,所以下面就来看看如何设计与实现一个简单的Servlet容器吧
    2023-07-07
  • Spring中的循环依赖详解

    Spring中的循环依赖详解

    这篇文章主要介绍了Spring中的循环依赖详解,  Spring 框架是一个流行的Java应用程序框架,它提供了许多强大的功能,如依赖注入和面向切面编程,然而在使用 Spring 框架时,我们可能会遇到循环依赖的问题,需要的朋友可以参考下
    2023-09-09
  • 解决idea web 配置相对路径问题

    解决idea web 配置相对路径问题

    这篇文章主要介绍了idea web 配置相对路径问题的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • 浅谈静态变量、成员变量、局部变量三者的区别

    浅谈静态变量、成员变量、局部变量三者的区别

    下面小编就为大家带来一篇浅谈静态变量、成员变量、局部变量三者的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • JAVA中 Spring定时器的两种实现方式

    JAVA中 Spring定时器的两种实现方式

    本文向您介绍Spring定时器的两种实现方式,包括Java Timer定时和Quartz定时器,两种Spring定时器的实现方式各有优点,可结合具体项目考虑是否采用。
    2015-09-09
  • lombok中@Data使用常见的小坑及解决

    lombok中@Data使用常见的小坑及解决

    在Java中使用Lombok库的@Data注解时,布尔类型属性可能导致生成的get方法不符合预期,对于非is开头的布尔属性,Lombok生成的方法会添加is前缀,导致原本期待的get方法不存在,例如,对于属性private boolean active,Lombok会生成方法名为isActive而不是getActive
    2024-10-10
  • java开发ShardingSphere的路由引擎类型示例详解

    java开发ShardingSphere的路由引擎类型示例详解

    这篇文章主要为大家介绍了java开发ShardingSphere的路由引擎类型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Maven编译错误:程序包com.sun.*包不存在的三种解决方案

    Maven编译错误:程序包com.sun.*包不存在的三种解决方案

    J2SE中的类大致可以划分为以下的各个包:java.*,javax.*,org.*,sun.*,本文文章主要介绍了maven编译错误:程序包com.sun.xml.internal.ws.spi不存在的解决方案,感兴趣的可以了解一下
    2024-02-02

最新评论