一次关于Nacos配置中心的问题记录与解决


文章目录

  • 引言
  • 环境介绍
  • 问题介绍
  • 问题分析
    • 报错一
    • 报错二
    • 解决思路
  • 解决
  • 反思
  • 总结❤️


引言

笔者最近在魔改自己的组件项目,于是想到了引入Nacos来作为自己的配置中心,但是在写好相应的代码后出现了问题,后面会详细叙述

环境介绍

接下来先来介绍笔者的项目环境

  • SpringBoot:2.7.12
  • jdk:17
  • nacos:2.5.1
  • spring-cloud-starter-alibaba-nacos-config:2021.0.6.0
  • snakeyaml:1.30

以下是相应的pom文件配置:


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config
    2021.0.6.0


    org.yaml
    snakeyaml
    1.30

为什么选用nacos2.5.1,因为官方文档介绍他是稳定生产版本,那么应该可以向下兼容。

为什么选用spring-cloud-starter-alibaba-nacos-config:2021.0.6.0,因为为了匹配笔者的springBoot版本。

问题介绍

当笔者编写完相应代码时,进行测试时,发现无法启动应用。相应的有主要两个报错。

ps:这两个报错不是一起出现的,笔者只是将他们合在一起讲解。

报错一:java.lang.IllegalStateException:Unable to load config data from nacos

报错二:DEBUG org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - Application failed to start due to an exception org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set

问题分析

报错一

报错一的意思大概就是说:这个错误是 Spring Boot 在尝试加载 Nacos 配置时,无法识别配置文件的格式(即 file-extension ,或者没有正确指定配置源类型

笔者然后在bootstrap.yml文件这样配置

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: a00510c4-c973-4179-961e-dd500a1c350d
        group: DEFAULT_GROUP
        file-extension: yaml

主要是添加了file-extension: yaml,文件识别为yaml格式

笔者将maven进行clean + install之后还是不行,报错依然是报错一

报错二

报错二的意思大概就是Spring Boot 2.4 开始,引入了新的外部配置加载机制(ConfigData),SpringBoot要显式的声明从哪里导入配置,比如nacos。

然后笔者在bootstrap.yml文件这样进行配置

spring:
  config: 
    import: - nacos
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: a00510c4-c973-4179-961e-dd500a1c350d
        group: DEFAULT_GROUP
        file-extension: yaml

结果还是报错二

解决思路

笔者由这两个报错联想到,这两个报错都有个共同点,就是无法识别配置源的信息,既然这样,那么我直接禁用检查,先让应用启动跑起来看看有没有其他报错不就行了吗?

解决

按照上述思路,笔者打算一招就解决两个报错,试试就试试!!

bootstrap.yml如下:

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: a00510c4-c973-4179-961e-dd500a1c350d
        group: DEFAULT_GROUP
        file-extension: yaml

application.yml如下:

spring:
  application:
    name: dynamic-thread-pool-test-app

  profiles:
    active: dev

application-dev.yml如下:

server:
  port: 8093
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: a00510c4-c973-4179-961e-dd500a1c350d
        group: DEFAULT_GROUP
        data-id: dynamic-thread-pool-test-app-dev.yaml
        file-extension: yaml
        import-check:
          enabled: false
        extension-configs:
          - data-id: dynamic-thread-pool-test-app-dev.yaml
            group: DEFAULT_GROUP
            refresh: true

主要解决问题的点在于使用了import-check: enabled: false,禁用了检查。

笔者然后顺利了启动应用进行测试,应用的新功能都按照预期进行,没有其他bug。

反思

笔者觉得应该是boot的版本和nacos的版本有点冲突导致的,或者是笔者还没有真正的找到问题所在,只能使用停止检查的手段,如果你也有这样的困惑,不妨也试试我的方法。也请有懂的佬来看看是怎么回事,评论区见。

总结❤️

这是笔者的一次报错解决,如果你看了这篇文章有收获可以点赞+关注+收藏,这是对笔者更新的最大鼓励!如果你有更多方案或者文章中有错漏之处,请在评论区提出帮助笔者勘误,祝你拿到更好的offer!

你可能感兴趣的:(nacos,spring,boot,后端,java)