Yml使用Spring启动配置文件“继承”

时间:2018-01-18 21:07:17

标签: spring-boot spring-profiles

我无法在网上找到直接答案。

Spring Boot的yml文件是否“相互继承”?我的意思是,如果我有: application.yml

server:
  port: 80
  host: foo
只有

application-profile1.yml

server:
  port: 90

因此,如果我以profile1作为有效个人资料启动Spring Boot,我是否还将server.host属性设置为foo

2 个答案:

答案 0 :(得分:6)

是的,application.yml文件优先于任何application-{profile}.yml文件。配置文件特定yml文件中的属性将覆盖默认application.yml文件中的值,并且特定于配置文件的yml文件中不存在的属性将从默认值加载。它适用于.properties文件以及bootstrap.ymlbootstrap.properties

Spring Boot文档在72.7 Change configuration depending on the environment段中提到它:

  

在此示例中,默认端口为9000,但如果Spring配置文件'development'处于活动状态,则端口为9001,如果'production'处于活动状态,则为0。

     

YAML文档按照遇到的顺序合并(以后的值会覆盖之前的值)。

     

要对属性文件执行相同操作,可以使用application-${profile}.properties指定特定于配置文件的值。

答案 1 :(得分:0)

这是我的解决方法。

假设application.yml

spring:
  profiles: default-server-config

server:
  port: 9801
  servlet:
    context-path: '/ctp'

如果我想使用default-server-config配置文件,并在我的8080中使用端口application-dev.yml

application-dev.yml

spring:
  profiles:
    include:
      - default-server-config
      - dev-config

---
spring:
  profiles: dev-config
  
server:
  port: 8080

然后-Dspring.profiles.active=dev