Interface ConfigurableEnvironment
- All Superinterfaces:
ConfigurablePropertyResolver
,Environment
,PropertyResolver
- All Known Subinterfaces:
ConfigurableWebEnvironment
- All Known Implementing Classes:
AbstractEnvironment
,MockEnvironment
,StandardEnvironment
,StandardServletEnvironment
Environment
types.
Provides facilities for setting active and default profiles and manipulating underlying
property sources. Allows clients to set and validate required properties, customize the
conversion service and more through the ConfigurablePropertyResolver
superinterface.
Manipulating property sources
Property sources may be removed, reordered, or replaced; and additional
property sources may be added using the MutablePropertySources
instance returned from getPropertySources()
. The following examples
are against the StandardEnvironment
implementation of
ConfigurableEnvironment
, but are generally applicable to any implementation,
though particular default property sources may differ.
Example: adding a new property source with highest search priority
ConfigurableEnvironment environment = new StandardEnvironment(); MutablePropertySources propertySources = environment.getPropertySources(); Map<String, Object> myMap = new HashMap<>(); myMap.put("xyz", "myValue"); propertySources.addFirst(new MapPropertySource("MY_MAP", myMap));
Example: removing the default system properties property source
MutablePropertySources propertySources = environment.getPropertySources(); propertySources.remove(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)
Example: mocking the system environment for testing purposes
MutablePropertySources propertySources = environment.getPropertySources(); MockPropertySource mockEnvVars = new MockPropertySource().withProperty("xyz", "myValue"); propertySources.replace(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, mockEnvVars);When an
Environment
is being used by an ApplicationContext
, it is
important that any such PropertySource
manipulations be performed
before the context's refresh()
method is called. This ensures that all property sources are available during the
container bootstrap process, including use by property
placeholder configurers.- Since:
- 3.1
- Author:
- Chris Beams
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addActiveProfile
(String profile) Add a profile to the current set of active profiles.Return thePropertySources
for thisEnvironment
in mutable form, allowing for manipulation of the set ofPropertySource
objects that should be searched when resolving properties against thisEnvironment
object.Return the value ofSystem.getenv()
.Return the value ofSystem.getProperties()
.void
merge
(ConfigurableEnvironment parent) Append the given parent environment's active profiles, default profiles and property sources to this (child) environment's respective collections of each.void
setActiveProfiles
(String... profiles) Specify the set of profiles active for thisEnvironment
.void
setDefaultProfiles
(String... profiles) Specify the set of profiles to be made active by default if no other profiles are explicitly made active throughsetActiveProfiles(java.lang.String...)
.Methods inherited from interface org.springframework.core.env.ConfigurablePropertyResolver
getConversionService, setConversionService, setIgnoreUnresolvableNestedPlaceholders, setPlaceholderPrefix, setPlaceholderSuffix, setRequiredProperties, setValueSeparator, validateRequiredProperties
Methods inherited from interface org.springframework.core.env.Environment
acceptsProfiles, acceptsProfiles, getActiveProfiles, getDefaultProfiles, matchesProfiles
Methods inherited from interface org.springframework.core.env.PropertyResolver
containsProperty, getProperty, getProperty, getProperty, getProperty, getRequiredProperty, getRequiredProperty, resolvePlaceholders, resolveRequiredPlaceholders
-
Method Details
-
setActiveProfiles
Specify the set of profiles active for thisEnvironment
. Profiles are evaluated during container bootstrap to determine whether bean definitions should be registered with the container.Any existing active profiles will be replaced with the given arguments; call with zero arguments to clear the current set of active profiles. Use
addActiveProfile(java.lang.String)
to add a profile while preserving the existing set.- Throws:
IllegalArgumentException
- if any profile is null, empty or whitespace-only- See Also:
-
addActiveProfile
Add a profile to the current set of active profiles.- Throws:
IllegalArgumentException
- if the profile is null, empty or whitespace-only- See Also:
-
setDefaultProfiles
Specify the set of profiles to be made active by default if no other profiles are explicitly made active throughsetActiveProfiles(java.lang.String...)
.- Throws:
IllegalArgumentException
- if any profile is null, empty or whitespace-only- See Also:
-
getPropertySources
MutablePropertySources getPropertySources()Return thePropertySources
for thisEnvironment
in mutable form, allowing for manipulation of the set ofPropertySource
objects that should be searched when resolving properties against thisEnvironment
object. The variousMutablePropertySources
methods such asaddFirst
,addLast
,addBefore
andaddAfter
allow for fine-grained control over property source ordering. This is useful, for example, in ensuring that certain user-defined property sources have search precedence over default property sources such as the set of system properties or the set of system environment variables. -
getSystemProperties
Return the value ofSystem.getProperties()
.Note that most
Environment
implementations will include this system properties map as a defaultPropertySource
to be searched. Therefore, it is recommended that this method not be used directly unless bypassing other property sources is expressly intended. -
getSystemEnvironment
Return the value ofSystem.getenv()
.Note that most
Environment
implementations will include this system environment map as a defaultPropertySource
to be searched. Therefore, it is recommended that this method not be used directly unless bypassing other property sources is expressly intended. -
merge
Append the given parent environment's active profiles, default profiles and property sources to this (child) environment's respective collections of each.For any identically-named
PropertySource
instance existing in both parent and child, the child instance is to be preserved and the parent instance discarded. This has the effect of allowing overriding of property sources by the child as well as avoiding redundant searches through common property source types, e.g. system environment and system properties.Active and default profile names are also filtered for duplicates, to avoid confusion and redundant storage.
The parent environment remains unmodified in any case. Note that any changes to the parent environment occurring after the call to
merge
will not be reflected in the child. Therefore, care should be taken to configure parent property sources and profile information prior to callingmerge
.- Parameters:
parent
- the environment to merge with- Since:
- 3.1.2
- See Also:
-