SpringBoot主项目如何覆盖依赖Jar包内的配置属性
问题原因
- Spring Boot 配置加载遵循明确的优先级规则:带激活 Profile 标识的配置文件,优先级始终高于无 Profile 标识的默认配置文件;同时主项目根目录下
./config文件夹的配置优先级,高于依赖 Jar 包内classpath路径下的配置。 - 你当前激活了
devProfile,依赖 Jar 内的application-dev.yml属于devProfile 专属配置,优先级高于主项目./config下无 Profile 标识的默认application.yml,因此 Jar 包内的属性值会覆盖主项目默认配置的值,最终生效值为true。
解决方法(无需修改依赖 Jar 包)
方法1:主项目新增dev Profile专属配置文件
在主项目的./config目录下新建application-dev.yml,写入以下内容:
app-configuration.org.app.shell: false
主项目./config目录下的 Profile 专属配置优先级高于依赖 Jar 内的同 Profile 配置,启动后该值会自动覆盖 Jar 内的配置生效。
方法2:主项目默认配置内嵌dev Profile配置块
如果不想新增单独的配置文件,可以直接在主项目./config/application.yml中添加dev Profile 专属配置块,效果和新增单独配置文件完全一致:
spring: config: activate: on-profile: dev app-configuration: org: app: shell: false
方法3:启动时通过命令行参数覆盖
命令行参数的优先级高于所有配置文件,启动应用时追加对应参数即可直接覆盖属性值:
java -jar 你的主项目Jar包名.jar --app-configuration.org.app.shell=false
内容的提问来源于stack exchange,提问作者bobbyrne01
相关产品推荐
相关产品推荐

