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

这里写目录标题

    • 一、场景
    • 二、关键依赖
    • 三、报错信息
    • 四、排查
      • 1、`bootstrap.yml`配置
      • 2、查看Nacos配置中心
      • 3、重启后程序依旧报错,查看启动日志,发现Nacos加载到了错误的配置文件
      • 4、Debug查看源码,企图弄清楚使用错误应用名的原因
      • 5、找不到使用依赖程序应用名的原因,发现`ConfigurationProperties`的属性可以手动进行配置,进行尝试
    • 五、原因
    • 六、解决
    • 七、Nacos配置文件DataId配置规则
    • 八、备注

一、场景

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没有添加文件后缀

在这里插入图片描述


2.2、调整配置文件DataId

在这里插入图片描述


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进行查看

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

在这里插入图片描述

– 往前查看配置来源

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

bootstrap.yml指定配置文件前缀

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

至此,程序启动正常


五、原因

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


六、解决

bootstrap.yml指定配置文件前缀

在这里插入图片描述


七、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

具体原因不确定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/155702.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DDR3 的相关设计规范(个人总结)

文章目录 阻抗控制布局布线电源处理时序要求 DDR3 的相关设计规范(个人总结) 阻抗控制 DDR3 要严格控制阻抗&#xff0c;单线 50ohm&#xff0c;差分 100ohm&#xff0c;差分一般为时钟、DQS。在走线过程中&#xff0c;尽量减小阻抗跳变的因素&#xff0c;比如:换层(无法避免…

CSS特效012:边框线条环绕流动效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

C++二分查找算法:规划兼职工作

题目 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作&#xff0c;每份工作预计从 startTime[i] 开始到 endTime[i] 结束&#xff0c;报酬为 profit[i]。 给你一份兼职工作表&#xff0c;包含开始时间 startTime&#xff0c;结束时间 endTime 和预计报酬 pro…

Vue3 生命周期

如下是Vue3的生命周期函数图&#xff1a; 一、Vue2生命周期和Vue3声明周期的区别 1. Vue2 中&#xff0c;只要创建Vue实例对象而不需要挂载就可以实现beforeCreate 和 created 生命周期函数。 Vue3中必须要将Vue实例对象挂载完成&#xff0c;所有的准备工作做完&#xff0c;…

V10 桌面版、服务器版系统加固

V10 桌面版、服务器版系统加固 一、 文档说明 本文档中涉及的加固方法主要包括&#xff1a;密码策略配置、防火墙规 则配置、禁用高风险服务等。 二、 V10 桌面版系统加固 2.1 密码策略配置 密码策略包括密码老化控制策略和密码复杂度策略。密码老化 控制策略需要配置/etc…

Git客户端(TortoiseGit)使用

参考文章&#xff1a; https://www.cnblogs.com/xuwenjin/p/8573603.html 【精选】使用TortoiseGit工具进行开发&#xff08;连接远程仓库进行克隆、拉取、获取、提交、推送、新建/切换/合并分支、解决冲突&#xff09;_tortoisegit连接远程仓库-CSDN博客 tortoise git 拉取…

二进制的形式在内存中绘制一个对象实例

一、引用类型实例的内存布局 从内存布局的角度来看&#xff0c;一个引用类型的实例由如下图所示的三部分组成&#xff1a;ObjHeader TypeHandle Fields。前置的ObjHeader用来缓存哈希值和同步状态&#xff0c;TypeHandle部分存储类型对应方法表&#xff08;Method Table&…

2023.11.17 -hivesql调优,数据压缩,数据存储

目录 1.hive命令和参数配置 2.hive数据压缩 3.hive数据存储 0.原文件大小 18.1MB 1.textfile行存储格式, 压缩后size:18MB 2.行存储格式:squencefile ,压缩后大小8.89MB​ 3. 列存储格式 orc - ZILIB ,压缩后大小2.78MB 4.列存储格式 orc-snappy ,压缩后大小3.75MB 5…

设计模式-中介者模式-笔记

Medicator中介者模式 动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;经常会出现多个对象相互关联交际的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。 …

简单回顾矩阵的相乘(点乘)230101

[[1 0 1][1 1 0]] [[3 0 0 3][2 2 1 3][1 3 1 1]] [[4. 3. 1. 4.][5. 2. 1. 6.]]乘以 c11 a11*b11 a12*b21 a13*b31 1*3 0*2 1*1 4 c12 a11*b12 a12*b22 a13*b32 1*0 0*2 1*3 3 c13a11*b13 a12*b23a13*b33 c14a11*b14 a12*b24a13*b34 c21a21*b11 a22*b21 a23*b…

【iDRAC】突破错误信息壁垒,利用iDRAC提高效率

序 面对旧服务器上的黄色警示灯&#xff0c;工作人员往往陷入困惑。更糟糕的是&#xff0c;如果该服务器转手多次&#xff0c;缺少root用户密码和IP地址&#xff0c;那么要访问服务器iDRAC就更困难了。但是出现问题的硬件蕴含着重要信息&#xff0c;为了解开这个谜团&#xff…

基于STC12C5A60S2系列1T 8051单片的IIC总线器件数模芯片PCF8591实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的IIC总线器件数模芯片PCF8591实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍IIC总线器件数模芯片PCF8591介绍通过按…

windows11编译ffmpeg

安装msys2&#xff0c;直接https://www.msys2.org/上下载exe安装即可&#xff0c;默认路径&#xff1b; 选择msys2-mingw64启动&#xff0c;将下载源替换为中科大 sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*pacman -S…

RocketMQ的适用场景有哪些?

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

Leetcode刷题详解——衣橱整理

1. 题目链接&#xff1a;LCR 130. 衣橱整理 2. 题目描述&#xff1a; 家居整理师将待整理衣橱划分为 m x n 的二维矩阵 grid&#xff0c;其中 grid[i][j] 代表一个需要整理的格子。整理师自 grid[0][0] 开始 逐行逐列 地整理每个格子。 整理规则为&#xff1a;在整理过程中&am…

解决:Android TextView 设置斜体后右侧文字被遮挡

一、问题说明 遇到一个比较奇怪的情况&#xff0c;给 TextView 文字设置倾斜后&#xff0c;右侧的文字会被遮挡&#xff0c;感觉这应该是 Android 的一个 bug &#xff01; 上代码&#xff1a; <TextViewandroid:id"id/tv_title"android:layout_width"wra…

【计算机网络笔记】网络地址转换(NAT)

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

GO语言的由来与发展历程

Go语言&#xff0c;也称为Golang&#xff0c;是由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明&#xff0c;并于2009年正式对外发布的开源编程语言。 三名初始人的目标是设计一种适应网络和多核时代的C语言&#xff0c;Go语言从C继承了…

Rust 语言中的结构体

目录 1、结构体 2、结构体的定义和实例化 2.1 使用字段初始化简写语法 2.2 使用结构体更新语法从其他实例创建实例 2.3 没有命名字段的元组结构体 2.4 没有任何字段的类单元结构体 2.5 结构体示例程序 3、方法 3.1 关联函数 3.2 多个 impl 块 1、结构体 struct&…

2023年09月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下选项中,不是tkinter变量类型的是?( ) A: IntVar() B: StringVar() C: DoubleVar() D: FloatVar() 答案:D tkinter 无 FloatVar()变量类型。 第2题 关于tkinter,以下说…