Spring Boot中子目录下的application-{profile}.yml配置文件无法加载如何解决
Spring Boot自定义子目录环境配置加载解决方案
Spring Boot默认只会扫描以下路径的application*.yml配置文件:
- classpath根目录
- classpath:/config/
- 项目当前运行目录
- 项目当前运行目录的config子目录
自定义子目录不在默认扫描范围内,可通过以下几种方案解决:
方案1:启动时追加配置搜索路径(推荐,无需修改打包逻辑)
使用spring.config.additional-location参数追加自定义搜索路径,该参数不会覆盖原有默认搜索路径,不会影响默认配置加载:
- Jar包启动命令示例(激活prof1环境,同时追加config/prof1、resources/prof2为配置搜索目录):
java -jar your-app.jar --spring.profiles.active=prof1 --spring.config.additional-location=classpath:/config/prof1/,classpath:/resources/prof2/
注意:路径末尾必须加斜杠
/,代表扫描该目录下的所有配置文件,否则Spring会将路径识别为单个配置文件,导致加载失败。
- 本地IDEA启动时,可在启动配置的「Program arguments」栏填入上述启动参数即可生效。
方案2:构建工具按环境复制配置到默认扫描路径
如果不想每次启动加参数,可以通过Maven/Gradle的profile功能,在打包时根据指定的环境,将对应子目录的配置文件自动复制到默认扫描的classpath:/或者classpath:/config/目录下:
以Maven为例,在pom.xml中配置不同profile对应不同配置文件路径,打包时执行mvn clean package -P prof1即可自动将prof1子目录的配置复制到默认扫描路径。
方案3:覆盖默认配置搜索路径
如果完全不需要默认的配置搜索路径,可以使用spring.config.location参数直接指定所有要扫描的配置路径,优先级高于默认路径:
java -jar your-app.jar --spring.profiles.active=prof1 --spring.config.location=classpath:/,classpath:/config/prof1/
注意事项
- 多个搜索路径的优先级从左到右依次升高,右侧路径的配置会覆盖左侧路径的同名属性。
- 配置文件命名仍需遵循
application-{profile}.yml的规则,才能被对应激活的profile自动加载。
内容的提问来源于stack exchange,提问作者nickkard
相关产品推荐
相关产品推荐

