Spring Boot使用spring.config.additional-location指定文件覆盖prod属性不生效
根因分析
- 核心是Spring Boot 2.3.x版本的配置优先级规则:同一来源的配置中,profile专属配置(
application-{profile}.properties)的优先级始终高于普通基础配置(application.properties)。 - 你通过
spring.config.additional-location指定的外部application.properties属于普通基础配置,优先级低于jar包内已激活的prod专属配置application-prod.properties,因此你在外部普通配置里写的属性会被jar包内的prod配置覆盖,看起来就是不生效。 - 你指定文件夹路径时生效,是因为Spring Boot扫描文件夹时会自动加载该目录下匹配当前profile的专属配置文件,优先级高于jar包内的同类型配置,所以可以正常覆盖。
解决方案
方案1:适配profile命名规则
将外部配置文件改名为application-prod.properties,直接指定该文件即可生效:
java -jar myjar.jar --spring.profiles.active=prod --spring.config.additional-location=file:/to/folder/application-prod.properties
方案2:直接用更高优先级的参数覆盖
如果只需要覆盖单个属性,直接通过命令行参数传入,优先级高于所有配置文件:
java -jar myjar.jar --spring.profiles.active=prod --spring.datasource.password=目标密码
方案3:替换默认配置加载路径
如果你需要完全自定义配置加载顺序,可使用spring.config.location指定所有要加载的配置文件,路径按优先级从低到高排列,逗号分隔:
java -jar myjar.jar --spring.profiles.active=prod --spring.config.location=classpath:/application.properties,classpath:/application-prod.properties,file:/to/folder/application.properties
内容的提问来源于stack exchange,提问作者flywell
相关产品推荐
相关产品推荐

