使用nacos配置中心管理配置文件时,springcloud程序启动报错,无法找到对应的配置文件(加载到了错误的配置文件)

这篇具有很好参考价值的文章主要介绍了使用nacos配置中心管理配置文件时,springcloud程序启动报错,无法找到对应的配置文件(加载到了错误的配置文件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、场景

1、将SpringBoot项目升级为SpringCloud

2、SpringBoot版本从2.1.3.RELEASE升级为2.7.8

3、不使用Nacos配置中心,而是加载本地配置文件时,程序启动正常

4、使用Nacos配置中心,加载到了错误的配置文件,导致程序启动失败


二、关键依赖

<!--nacos-config-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	<version>2021.0.5.0</version>
</dependency>

<!--nacos-discovery-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	<version>2021.0.5.0</version>
</dependency>

<!-- spring-cloud-starter-bootstrap -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
	<version>2.7.8</version>
</dependency>

三、报错信息

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingDataSourceConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sharding.jdbc.datasource.driver' in value "${sharding.jdbc.datasource.driver}"
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
	at com.xxx.OnlineApp.main(OnlineApp.java:33)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'sharding.jdbc.datasource.driver' in value "${sharding.jdbc.datasource.driver}"
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180)
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239)
	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191)
	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1332)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
	... 17 common frames omitted

四、排查

1、bootstrap.yml配置

server:
  port: 8877 #服务端口号

spring:
  ## 服务名称,默认项目名称
  application:
    name: focallmedia-online-admin-cloud
  profiles:
  	# 这里已将Nacos管理的配置文件加进来了
    include: config,rocketmq,scheduler,shardingDataSource
  main:
    allow-circular-references: true
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.231:8848 #服务注册中心地址
        namespace: focallmedia
        group: dev

      config:
        server-addr: 192.168.1.231:8848 #配置中心地址
        file-extension: properties #指定properties格式的配置
        namespace: focallmedia
        group: dev

2、查看Nacos配置中心

2.1、groupnamespace都没有问题,但配置文件的DataId没有添加文件后缀

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端


2.2、调整配置文件DataId

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端


3、重启后程序依旧报错,查看启动日志,发现Nacos加载到了错误的配置文件

日志如下

2023-11-16 10:11:42.892 - [WARN ] - [main] - [c.a.cloud.nacos.client.NacosPropertySourceBuilder - line:87]: Ignore the empty nacos configuration and get it based on dataId[focallmedia-common] & group[dev]
2023-11-16 10:11:42.908 - [WARN ] - [main] - [c.a.cloud.nacos.client.NacosPropertySourceBuilder - line:87]: Ignore the empty nacos configuration and get it based on dataId[focallmedia-common.properties] & group[dev]
2023-11-16 10:11:42.908 - [WARN ] - [main] - [c.a.cloud.nacos.client.NacosPropertySourceBuilder - line:87]: Ignore the empty nacos configuration and get it based on dataId[focallmedia-common-config.properties] & group[dev]
2023-11-16 10:11:42.908 - [WARN ] - [main] - [c.a.cloud.nacos.client.NacosPropertySourceBuilder - line:87]: Ignore the empty nacos configuration and get it based on dataId[focallmedia-common-rocketmq.properties] & group[dev]
2023-11-16 10:11:42.908 - [WARN ] - [main] - [c.a.cloud.nacos.client.NacosPropertySourceBuilder - line:87]: Ignore the empty nacos configuration and get it based on dataId[focallmedia-common-scheduler.properties] & group[dev]
2023-11-16 10:11:42.924 - [WARN ] - [main] - [c.a.cloud.nacos.client.NacosPropertySourceBuilder - line:87]: Ignore the empty nacos configuration and get it based on dataId[focallmedia-common-shardingDataSource.properties] & group[dev]
2023-11-16 10:13:16.856 - [INFO ] - [main] - [o.s.c.b.c.PropertySourceBootstrapConfiguration - line:109]: Located property source: [BootstrapPropertySource {name='bootstrapProperties-focallmedia-common-shardingDataSource.properties,dev'}, BootstrapPropertySource {name='bootstrapProperties-focallmedia-common-scheduler.properties,dev'}, BootstrapPropertySource {name='bootstrapProperties-focallmedia-common-rocketmq.properties,dev'}, BootstrapPropertySource {name='bootstrapProperties-focallmedia-common-config.properties,dev'}, BootstrapPropertySource {name='bootstrapProperties-focallmedia-common.properties,dev'}, BootstrapPropertySource {name='bootstrapProperties-focallmedia-common,dev'}]

– 从日志上看是加载配置文件时,文件的前缀没有使用当前程序配置的spring.application.name属性

– 加载配置文件使用的前缀focallmedia-common是当前程序pom里边依赖的某个Jar包

为什么会使用到Jar包配置的应用名?为什么不使用bootstrap.yml所配置的应用名?Debug查看源码试图找到答案,由于水平太菜,没有找到原因(欢迎大佬留言)


4、Debug查看源码,企图弄清楚使用错误应用名的原因

– 日志是PropertySourceBootstrapConfiguration打印出来的,直接找到这个class进行查看

– 发现加载了错误的配置文件

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端

– 往前查看配置来源

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端
nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端

依照程序的执行,最先需要注入配置的确实是focallmedia-common这个依赖,但其他项目也依赖了这个Jar包,为什么启动是正常的?

5、找不到使用依赖程序应用名的原因,发现ConfigurationProperties的属性可以手动进行配置,进行尝试

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端

bootstrap.yml指定配置文件前缀

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端
nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端
nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端
nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端

至此,程序启动正常


五、原因

Nacos加载的配置文件没有使用spring.application.name所配置的应用名,而是加载到了依赖Jar包的应用名(具体原因不明,欢迎大佬留言)


六、解决

bootstrap.yml指定配置文件前缀

nacos 配置文件 属性加载失败,SpringCloud,Java开发问题,spring cloud,spring boot,后端


七、Nacos配置文件DataId配置规则

DataId的规则: $ {prefix}-spring.profile.active.{file-extension}

$ {prefix}: 前缀,默认为spring.application.name的值

$ {spring.profile.active} 当前环境对应的profile(多环境配置)

$ {file-extension} 配置内容的数据格式(文件扩展名)

配置时需要和bootstrap.yml中配置的file-extension属性保持一致,否则不能正常读取


八、备注

该问题在其他springcloud项目上没有出现,就算没有在bootstrap.yml配置的spring.cloud.nacos.config.prefix属性,依旧可以找到nacos配置中心正确的配置文件(该程序也依赖了focallmedia-common

具体原因不确定文章来源地址https://www.toymoban.com/news/detail-764037.html

到了这里,关于使用nacos配置中心管理配置文件时,springcloud程序启动报错,无法找到对应的配置文件(加载到了错误的配置文件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud-搭建Nacos配置中心

    Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个分布式服务注册、配置管理,以及服务健康管理平台。在微服务架构中,配置管理是至关重要的一环,Nacos 提供了可靠、动态的配置管理功能,为分布式系统的配置中心提供了便捷的解决方案。 Nacos的主要功能图:

    2024年02月20日
    浏览(39)
  • SpringCloud之Nacos配置中心解读

    目录 基本介绍  概述 动态配置服务 多配置格式编辑器  微服务拉取配置流程 Data ID @RefreshScope 配置共享的优先级 实战使用 简单的共享配置 开发环境的共享配置 环境隔离-命名空间Namespace 业务隔离-Group分组 概述 Nacos除了可以做注册中心,同样可以做配置管理来使用。 所谓

    2024年02月03日
    浏览(43)
  • 使用Nacos配置中心动态管理Spring Boot应用配置

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月12日
    浏览(48)
  • SpringCloud 配置中心【Nacos_Config】

    目录 1. SpringCloud Config 2. Nacos_Config 3. 使用 Nacos Config 添加/配置 外部配置文件 3.1 添加/配置命名空间 3.2 添加/配置 外部配置文件 3.3 外部文件克隆到其他空间 4. 新建子模块【config_client】 4.1 父模块pom文件依赖结构          4.2 子模块pom文件结构 4.3 配置子模块 bootstrap.yml文件

    2024年02月01日
    浏览(44)
  • SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

    Apache Dubbo是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力 1、协议支持方面 Feign更加优雅简单。Feign是通过REST API实现的远程调用,基于Http传输协议,服务提供者需要对外暴露Http接口供消费者调用,服务粒度是http接口级的。通过短连接的方式进行通信,

    2024年02月06日
    浏览(51)
  • 【微服务SpringCloud-Alibaba】:Nacos 配置中心

    在 SpringCloud 中,我们使用了 Config 组件管理所有配置文件,使用了 Bus 消息总线更新配置,两者需要配合使用才能动态的管理配置文件。而 Nacos 可以替代这两个组件,实现动态的管理所有配置文件。 2.1、添加配置文件 想要管理配置,先要有配置文件。在使用 Config 组件管理配

    2023年04月27日
    浏览(41)
  • 九、Nacos源码系列:Nacos配置中心原理(一)- SpringCloud应用启动时拉取配置

    熟悉Spring的小伙伴都知道,Spring 提供了强大的扩展机制。其中包括 ** ApplicationContextInitializer **,该扩展是在上下文准备阶段(prepareContext), 容器刷新之前做一些初始化工作 ,比如我们常用的配置中心 client 基本都是继承该初始化器,在容器刷新前将配置从远程拉到本地,然

    2024年02月19日
    浏览(42)
  • springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析

    Spring Cloud 是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等。 SpringCloud 将多个服务框架组合起来,通过Spring Boot进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者提供了一套简单易懂、易部署和易维护的分布式系统开

    2024年02月08日
    浏览(48)
  • springcloud使用nacos搭建注册中心

    nacos安装这里就不细说了,(Nacos下载以及搭建环境_你非柠檬为何心酸142的博客-CSDN博客) 大家也可以去网上安装好,这里主要讲搭建 ,我们需要手动启动nacos, 输入(.startup.cmd -m standalone),出现一下图标就代表ok  下面是我的pom.xml文件  首先是父工程所需要的依赖,需要注意的

    2024年02月08日
    浏览(36)
  • SpringCloud Alibaba集成 Gateway(自定义负载均衡器)、Nacos(配置中心、注册中心)、Loadbalancer

    路由(route):路由是网关最基础的部分,路由信息由一个ID,一个目的URL、一组断言工厂和一 组Filter组成。如果断言为真,则说明请求URL和配置的路由匹配。 断言(Predicate):Java8中的断言函数,Spring Cloud Gateway中的断言函数输入类型是 Spring5.0框架中的ServerWebExchange。Sprin

    2024年04月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包