Spring Boot 2.5.3无法识别外置config目录下的application.properties问题求助
问题根因与解决方案
1 最核心问题排查
首先检查你的项目配置类/启动类上是否添加了@PropertySource("classpath:application.properties")注解:
该注解默认会强制校验classpath下必须存在对应配置文件,你将application.properties放在jar外部的config目录,classpath根目录下没有该文件,所以无论怎么指定外部配置路径,都会触发找不到classpath资源的报错。
修复方案:
- 如无特殊需要,直接删除这个注解即可,Spring Boot默认会自动加载各优先级位置的
application.properties,包括jar同级config目录下的配置 - 如果需要保留多路径配置兼容,修改注解为:
@PropertySource(value = {"classpath:application.properties", "file:./config/application.properties"}, ignoreResourceNotFound = true)
添加ignoreResourceNotFound = true属性,允许找不到对应资源时不抛出异常。
2 build.gradle配置问题
你配置的processResources{ exclude '*/*' }会将src/main/resources目录下的所有资源文件排除,不会打进jar包中:
- 如果你是故意不把配置文件打进jar,完全依赖外部配置,该配置无需修改
- 如果你需要保留默认配置作为兜底,删除该exclude规则即可
3 启动命令的规范问题
你之前尝试的多条命令存在参数位置错误的问题:
- 所有
-D开头的JVM参数必须放在-jar xxx.jar之前,放在-jar之后的参数只会传给应用本身,JVM不会识别 --spring.config.location是Spring Boot的应用参数,必须放在-jar xxx.jar之后,你尝试5的写法把该参数放在JVM参数位置,所以会报无法识别选项的错误
可用启动命令示例
确认application.properties放在jar同级的config目录下,直接用以下命令启动即可:
java -jar drc-reports-generator.jar --spring.config.location=file:./config/application.properties
如果需要用JVM参数的写法,用下面的命令也可以:
java -Dspring.config.location=file:./config/application.properties -jar drc-reports-generator.jar
内容的提问来源于stack exchange,提问作者Sheljith krishnan
相关产品推荐
相关产品推荐

