YamlPropertySourceLoader
renders @PropertySource(ignoreResourceNotFound = true)
unusable
#29158
Labels
in: core
Issues in core modules (aop, beans, core, context, expression)
status: duplicate
A duplicate of another issue
Affects version: 5.3.22
该问题造成的影响:
尊敬的团队,当我使用
@PropertySource
注解通过YamlPropertySourceLoader
加载时,即使ignoreResourceNotFound
属性为true
,仍然会因无法找到文件抛出FileNotFoundException
异常,导致项目无法启动。Configuration code
PropertySourceFactory code
Error
产生该问题的原因:
在
ConfigurationClassParser.processPropertySource()
方法的try-catch块中,它的确存在捕获FileNotFoundException
的意图。但是,在
new YamlPropertySourceLoader().load()
执行过程中,如果产生了异常则会调用handleProcessError
方法。此方法对异常链进行了包装,使原本的FileNotFoundException
变为IllegalStateException
。从而导致抛出的
IllegalStateException
异常在外部catch块无法被捕获,导致ignoreResourceNotFound
无法被执行,异常被抛出。tips:catch语句只会判断主异常是否符合要求,不会也不应该检查cause。
临时解决方案
目前我将其抛出的
IllegalStateException
进行拆包并重新丢出,项目可以正常工作,但这显然并不优雅。我曾有进行修复的想法,但我并不了解
ResolutionMethod
的作用,且我的机器运行spring-framework这个庞大的项目较为吃力。或许可以从下图展示处开始思考。可能是状态判断的逻辑编写错误导致原本应该进行
logger.warn()
却进行了throw IllegalStateException
?定位到此处:
org.springframework.beans.factory.config.YamlProcessor
第218行,在 5.3.x 分支。org.springframework.beans.factory.config.YamlProcessor
line 218 for branch 5.3.x非常抱歉我没有使用English进行描述的能力。
这并不是一个严重的问题,至少目前可以run。
The text was updated successfully, but these errors were encountered: