Profiles#
Applications often require different configurations depending on the target environment. For example, the local development environment may be different from the production environment. Profiles allow for multiple configurations in the same file or separate files and select between them via a profile name.
Profile aware properties#
To be able to set properties with the same name, each property needs to be prefixed with a percentage sign %
followed
by the profile name and a dot .
in the syntax %{profile-name}.config.name
:
To activate the profile dev
, the configuration smallrye.config.profile=dev
has to be set into any valid
ConfigSource
.
Any lookup to the http.port
property name will first search by the active profile name %dev.http.port
and then
fallback to http.port
if no value is present. In this case a lookup to the property http.port
with the dev
profile
active, yields the value 8181
.
Attention
The profile must be set in one of the primary sources (system properties, environment variables,
application.properties
, or any other source that does not require configuration) to determine the proper
configuration.
Profile aware files#
Properties for a specific profile may reside in a microprofile-config-{profile}.properties
named file. The previous
example can be expressed as:
In this style, the property names in the profile aware file do not need to be prefixed with the profile name.
Note
Properties in the profile aware file have priority over profile aware properties defined in the main file.
Attention
Do not use Profile aware files to set smallrye.config.profile
. This will not work because the
the profile is required in advance to load the profile aware files.
Priority#
Profile lookups are only valid if the ConfigSource
has a higher ordinal than a lookup to the regular configuration
name. Consider:
Even with the profile dev
active, the lookup value for my.prop
is 1234
. This prevents lower ordinal sources to
set a profile property value that cannot be overridden unless the profile property is also overridden.
Multiple Profiles#
Multiple Profiles may be active at the same time. The configuration smallrye.config.profile
accepts a comma-separated
list of profile names: smallrye.config.profile=common,dev
. Both common
and dev
are separate profiles.
When multiple profiles are active, the rules for profile configuration are the same. If two profiles define the same configuration, then the last listed profile has priority. Consider:
smallrye.config.profile=common,dev
my.prop=1234
%common.my.prop=1234
%dev.my.prop=5678
%common.commom.prop=common
%dev.dev.prop=dev
%test.test.prop=test
Then
common.prop
value iscommon
dev.prop
value isdev
my.prop
value is5678
test.prop
does not have a value
It is also possible to define multiple profile properties, with a comma-separated list of profile names:
The property name common.prop
is active in both dev
and prod
profile. If the same property name exists in
multiple profile properties then, the property name with the most specific profile wins:
Then my.prop
value is 5678
.
Parent Profile#
A Parent Profile adds multiple levels of hierarchy to the current profile. The configuration
smallrye.config.profile.parent
also acccepts a comma-separated list of profile names.
When the Parent Profile is active, if a property cannot be found in the current active Profile, the config lookup fallbacks to the Parent Profile. Consider:
smallrye.config.profile=dev
smallrye.config.profile.parent=common
my.prop=1234
%common.my.prop=0
%dev.my.prop=5678
%common.commom.prop=common
%dev.dev.prop=dev
%test.test.prop=test
Then
common.prop
value iscommon
dev.prop
value isdev
my.prop
value is0
test.prop
does not have a value
Attention
Do not use Profile aware files to set smallrye.config.profile.parent`. This will not work because the the profile is required in advance to load the profile aware files.
Multi-level Hierarchy#
The Parent Profile also supports multiple levels of hierarchies:
smallrye.config.profile=child
%child.smallrye.config.profile.parent=parent
%parent.smallrye.config.profile.parent=grandparent
%grandparent.smallrye.config.profile.parent=greatgrandparent
%greatgrandparent.smallrye.config.profile.parent=end
Will load the following profiles in order: child
, parent
, grandparent
, greatgrandparent
, end