Spring配置文件加载方式变化引发的异常

在项目从Apollo切换到K8S配置时,通过`spring.config.location`加载配置导致SpringCloud与SpringBoot容器隔离,使得Dubbo的bean提前加载,引发启动失败。原因是SpringCloud的bootstrap阶段加载高优先级配置,Dubbo扫描到配置启动bean,而SpringBoot容器未完成初始化。解决方案包括禁用SpringCloud的bootstrap监听或改用Dubbo注解扫描。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景

我们项目的配置文件一直是通过Apollo进行管理,但是近期由于某些特殊的部署需求,需要使用K8S的原生对象来获取配置,如此一来的话,就需要使用环境变量spring.config.location来指定application.properties文件的路径,以便动态的获取配置。

说明:项目是一个dubbo项目,配置文件中主要包括一些基础组件的配置、以及dubbo相关的配置。

这时候问题来了,在所有配置及代码都没有变化的情况下,如果不指定环境变量使用本地的application.properties,则没有异常任何,项目可以正常启动,但是一但通过spring.config.location 来加载配置,则项目会直接启动失败,并报如下异常:

NoSuchBeanDefinitionException,这个异常前期误导我不少时间,它一般是Spring在容器初始化时,进行依赖注入的时候没有找到对应的bean定义,也就意味着这个bean压根没有被注册到BeanFactory中,这就很奇怪,只是配置文件的加载方式不同,为何会影响到bean的注册?

过程

找不到bean,最常见的问题有两种:要么是配置问题,比如扫描的包配置错误、配置未生效等。要么就是IoC容器的问题,存在多个容器ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值