Spring Boot多Profile场景:指定prod启动时是否合并配置?
Spring Boot多Profile配置合并问题解答
答案是肯定的——当你以prod Profile启动Spring Boot应用时,会同时合并所有包含prod的配置块,所以你的应用里会同时拥有property和another-property这两组属性。
具体逻辑说明
Spring Boot处理单个application.yml中用---分隔的多Profile配置块时,遵循以下规则:
- 当指定启动Profile为
prod时,所有配置块里spring.profiles字段包含prod的都会被激活加载; - 针对你的配置内容:
- 第一个配置块(
spring.profiles: dev)不会被激活,所以这部分的property配置完全不生效; - 第二个配置块(
spring.profiles: preProd, prod)因为包含prod,会被激活,another-property的配置会被加载到应用上下文; - 第三个配置块(
spring.profiles: prod)直接指定了prod,同样会被激活,这里的property配置也会被加载;
- 第一个配置块(
- 若存在同名属性,Spring Boot会按照「后加载覆盖先加载」的优先级处理——也就是在yml文件中位置更靠后的配置块,会覆盖前面块的同名属性。比如如果第二个块也定义了
property.one,那第三个块的prod-bla会替换掉它,但你的例子里两个激活块的属性没有重叠,所以都会完整保留。
最终生效的配置示例
当你用prod Profile启动后,应用实际生效的配置会是:
another-property: fist: bla secong: blabla property: one: prod-bla two: prod-blabla
内容的提问来源于stack exchange,提问作者huzeyfe
相关产品推荐
相关产品推荐

