Spring “spring.profiles.include” overrides

后端 未结 5 1060
感情败类
感情败类 2021-02-01 18:47

My intention is to have two profiles in a spring boot application - development and production one. Development profile is meant just to override some variables of production pr

5条回答
  •  死守一世寂寞
    2021-02-01 19:19

    Given:

    • The files: application-default.yml, application-foo.yml, application-bar.yml
    • myproperty: default in application-default.yml
    • myproperty: foo in application-foo.yml
    • myproperty: bar in application-bar.yml

    I think these 2 use cases of using profiles are a little bit opposite in the meaning:

    1. In the most common case (-Dspring.profiles.active but no spring.profiles.include):

      1. When profile foo or boo are activated the properties from application-foo.yml (or application-bar.yml) will add/override the ones from application-default.yml.
      2. When profiles foo,bar are activated then properties from bar will add/override those from application-foo.yml and then those from application-default.yml.

      E.g: -Dspring.profiles.active=foo,bar the property from application-bar.yml wins (overrides) -> myproperty: bar

    2. In the second case (spring.profiles.include is used)

      1. The properties from the include statement add/overrides the properties from the application-*.yml files which uses spring.profiles.include

      I.e.: If application-boo.yml contains the spring.profiles.include=foo then properties from application-foo.bar adds/override properties from from application-bar.yml which add/override those from application-default.yml.

      On the other hand (I suppose) if application-boo.yml includes the spring.profiles.include=default,foo then properties from application-foo.yml will add/override those from application-default.yml which add/overrides those from application-bar.yml. So myproperty: bar. I wouldn't recommend the usage of default in combination with spring.profiles.include because this way it mixes the two cases and the override strategy is counterintuitive considering application-default.yml has a special treatment in springboot.

    I also admit I am not at all a fan of the spring.profiles.active usage in application-*.yml files. I prefer to activate the profiles with system properties (maven included) or env variables. IMO it makes the whole profiles thing clearer to me.

    If with my (herein above)reasoning I am on the wrong path please let me know.

提交回复
热议问题