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
Given:
application-default.yml, application-foo.yml, application-bar.yml
myproperty: default
in application-default.ymlmyproperty: foo
in application-foo.ymlmyproperty: bar
in application-bar.ymlI think these 2 use cases of using profiles are a little bit opposite in the meaning:
In the most common case (-Dspring.profiles.active
but no spring.profiles.include
):
E.g: -Dspring.profiles.active=foo,bar
the property from application-bar.yml wins (overrides) -> myproperty: bar
In the second case (spring.profiles.include
is used)
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.