类 AbstractEnvironment
- java.lang.Object
- org.springframework.core.env.AbstractEnvironment
- 直接已知子类:
MockEnvironment
,StandardEnvironment
public abstract class AbstractEnvironment extends Object implements ConfigurableEnvironment
Abstract base class forEnvironment
implementations. Supports the notion of reserved default profile names and enables specifying active and default profiles through theACTIVE_PROFILES_PROPERTY_NAME
andDEFAULT_PROFILES_PROPERTY_NAME
properties.Concrete subclasses differ primarily on which
PropertySource
objects they add by default.AbstractEnvironment
adds none. Subclasses should contribute property sources through the protectedcustomizePropertySources(MutablePropertySources)
hook, while clients should customize usingConfigurableEnvironment.getPropertySources()
and working against theMutablePropertySources
API. SeeConfigurableEnvironment
javadoc for usage examples.- 从以下版本开始:
- 3.1
- 作者:
- Chris Beams, Juergen Hoeller
- 另请参阅:
ConfigurableEnvironment
,StandardEnvironment
字段概要
字段 修饰符和类型 字段 说明 static String
ACTIVE_PROFILES_PROPERTY_NAME
Name of property to set to specify active profiles: "spring.profiles.active".static String
DEFAULT_PROFILES_PROPERTY_NAME
Name of property to set to specify profiles active by default: "spring.profiles.default".static String
IGNORE_GETENV_PROPERTY_NAME
System property that instructs Spring to ignore system environment variables, i.e. to never attempt to retrieve such a variable viaSystem.getenv()
.protected Log
logger
protected static String
RESERVED_DEFAULT_PROFILE_NAME
Name of reserved default profile name: "default".
构造器概要
构造器 构造器 说明 AbstractEnvironment()
Create a newEnvironment
instance, calling back tocustomizePropertySources(MutablePropertySources)
during construction to allow subclasses to contribute or manipulatePropertySource
instances as appropriate.
方法概要
所有方法 实例方法 具体方法 已过时的方法 修饰符和类型 方法 说明 boolean
acceptsProfiles(String... profiles)
已过时。boolean
acceptsProfiles(Profiles profiles)
Return whether the active profiles match the givenProfiles
predicate.void
addActiveProfile(String profile)
Add a profile to the current set of active profiles.boolean
containsProperty(String key)
Return whether the given property key is available for resolution, i.e. if the value for the given key is notnull
.protected void
customizePropertySources(MutablePropertySources propertySources)
Customize the set ofPropertySource
objects to be searched by thisEnvironment
during calls togetProperty(String)
and related methods.protected Set<String>
doGetActiveProfiles()
Return the set of active profiles as explicitly set throughsetActiveProfiles(java.lang.String...)
or if the current set of active profiles is empty, check for the presence of the "spring.profiles.active" property and assign its value to the set of active profiles.protected Set<String>
doGetDefaultProfiles()
Return the set of default profiles explicitly set viasetDefaultProfiles(String...)
or if the current set of default profiles consists only of reserved default profiles, then check for the presence of the "spring.profiles.default" property and assign its value (if any) to the set of default profiles.String[]
getActiveProfiles()
Return the set of profiles explicitly made active for this environment.ConfigurableConversionService
getConversionService()
Return theConfigurableConversionService
used when performing type conversions on properties.String[]
getDefaultProfiles()
Return the set of profiles to be active by default when no active profiles have been set explicitly.String
getProperty(String key)
Return the property value associated with the given key, ornull
if the key cannot be resolved.<T> T
getProperty(String key, Class<T> targetType)
Return the property value associated with the given key, ornull
if the key cannot be resolved.<T> T
getProperty(String key, Class<T> targetType, T defaultValue)
Return the property value associated with the given key, ordefaultValue
if the key cannot be resolved.String
getProperty(String key, String defaultValue)
Return the property value associated with the given key, ordefaultValue
if the key cannot be resolved.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.String
getRequiredProperty(String key)
Return the property value associated with the given key (nevernull
).<T> T
getRequiredProperty(String key, Class<T> targetType)
Return the property value associated with the given key, converted to the given targetType (nevernull
).protected Set<String>
getReservedDefaultProfiles()
Return the set of reserved default profile names.Map<String,Object>
getSystemEnvironment()
Return the value ofSystem.getenv()
if allowed by the currentSecurityManager
, otherwise return a map implementation that will attempt to access individual keys using calls toSystem.getenv(String)
.Map<String,Object>
getSystemProperties()
Return the value ofSystem.getProperties()
if allowed by the currentSecurityManager
, otherwise return a map implementation that will attempt to access individual keys using calls toSystem.getProperty(String)
.protected boolean
isProfileActive(String profile)
Return whether the given profile is active, or if active profiles are empty whether the profile should be active by default.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.String
resolvePlaceholders(String text)
Resolve ${...} placeholders in the given text, replacing them with corresponding property values as resolved byPropertyResolver.getProperty(java.lang.String)
.String
resolveRequiredPlaceholders(String text)
Resolve ${...} placeholders in the given text, replacing them with corresponding property values as resolved byPropertyResolver.getProperty(java.lang.String)
.void
setActiveProfiles(String... profiles)
Specify the set of profiles active for thisEnvironment
.void
setConversionService(ConfigurableConversionService conversionService)
Set theConfigurableConversionService
to be used when performing type conversions on properties.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...)
.void
setIgnoreUnresolvableNestedPlaceholders(boolean ignoreUnresolvableNestedPlaceholders)
Set whether to throw an exception when encountering an unresolvable placeholder nested within the value of a given property.void
setPlaceholderPrefix(String placeholderPrefix)
Set the prefix that placeholders replaced by this resolver must begin with.void
setPlaceholderSuffix(String placeholderSuffix)
Set the suffix that placeholders replaced by this resolver must end with.void
setRequiredProperties(String... requiredProperties)
Specify which properties must be present, to be verified byConfigurablePropertyResolver.validateRequiredProperties()
.void
setValueSeparator(String valueSeparator)
Specify the separating character between the placeholders replaced by this resolver and their associated default value, ornull
if no such special character should be processed as a value separator.protected boolean
suppressGetenvAccess()
Determine whether to suppressSystem.getenv()
/System.getenv(String)
access for the purposes ofgetSystemEnvironment()
.String
toString()
protected void
validateProfile(String profile)
Validate the given profile, called internally prior to adding to the set of active or default profiles.void
validateRequiredProperties()
Validate that each of the properties specified byConfigurablePropertyResolver.setRequiredProperties(java.lang.String...)
is present and resolves to a non-null
value.
字段详细资料
IGNORE_GETENV_PROPERTY_NAME
public static final String IGNORE_GETENV_PROPERTY_NAME
System property that instructs Spring to ignore system environment variables, i.e. to never attempt to retrieve such a variable viaSystem.getenv()
.The default is "false", falling back to system environment variable checks if a Spring environment property (e.g. a placeholder in a configuration String) isn't resolvable otherwise. Consider switching this flag to "true" if you experience log warnings from
getenv
calls coming from Spring, e.g. on WebSphere with strict SecurityManager settings and AccessControlExceptions warnings.- 另请参阅:
suppressGetenvAccess()
, 常量字段值
ACTIVE_PROFILES_PROPERTY_NAME
public static final String ACTIVE_PROFILES_PROPERTY_NAME
Name of property to set to specify active profiles: "spring.profiles.active". Value may be comma delimited.Note that certain shell environments such as Bash disallow the use of the period character in variable names. Assuming that Spring's
SystemEnvironmentPropertySource
is in use, this property may be specified as an environment variable asSPRING_PROFILES_ACTIVE
.
DEFAULT_PROFILES_PROPERTY_NAME
public static final String DEFAULT_PROFILES_PROPERTY_NAME
Name of property to set to specify profiles active by default: "spring.profiles.default". Value may be comma delimited.Note that certain shell environments such as Bash disallow the use of the period character in variable names. Assuming that Spring's
SystemEnvironmentPropertySource
is in use, this property may be specified as an environment variable asSPRING_PROFILES_DEFAULT
.
RESERVED_DEFAULT_PROFILE_NAME
protected static final String RESERVED_DEFAULT_PROFILE_NAME
Name of reserved default profile name: "default". If no default profile names are explicitly and no active profile names are explicitly set, this profile will automatically be activated by default.
构造器详细资料
AbstractEnvironment
public AbstractEnvironment()
Create a newEnvironment
instance, calling back tocustomizePropertySources(MutablePropertySources)
during construction to allow subclasses to contribute or manipulatePropertySource
instances as appropriate.
方法详细资料
customizePropertySources
protected void customizePropertySources(MutablePropertySources propertySources)
Customize the set ofPropertySource
objects to be searched by thisEnvironment
during calls togetProperty(String)
and related methods.Subclasses that override this method are encouraged to add property sources using
MutablePropertySources.addLast(PropertySource)
such that further subclasses may callsuper.customizePropertySources()
with predictable results. For example:public class Level1Environment extends AbstractEnvironment { @Override protected void customizePropertySources(MutablePropertySources propertySources) { super.customizePropertySources(propertySources); // no-op from base class propertySources.addLast(new PropertySourceA(...)); propertySources.addLast(new PropertySourceB(...)); } } public class Level2Environment extends Level1Environment { @Override protected void customizePropertySources(MutablePropertySources propertySources) { super.customizePropertySources(propertySources); // add all from superclass propertySources.addLast(new PropertySourceC(...)); propertySources.addLast(new PropertySourceD(...)); } }
In this arrangement, properties will be resolved against sources A, B, C, D in that order. That is to say that property source "A" has precedence over property source "D". If theLevel2Environment
subclass wished to give property sources C and D higher precedence than A and B, it could simply callsuper.customizePropertySources
after, rather than before adding its own:public class Level2Environment extends Level1Environment { @Override protected void customizePropertySources(MutablePropertySources propertySources) { propertySources.addLast(new PropertySourceC(...)); propertySources.addLast(new PropertySourceD(...)); super.customizePropertySources(propertySources); // add all from superclass } }
The search order is now C, D, A, B as desired.Beyond these recommendations, subclasses may use any of the
add*
,remove
, orreplace
methods exposed byMutablePropertySources
in order to create the exact arrangement of property sources desired.The base implementation registers no property sources.
Note that clients of any
ConfigurableEnvironment
may further customize property sources via thegetPropertySources()
accessor, typically within anApplicationContextInitializer
. For example:ConfigurableEnvironment env = new StandardEnvironment(); env.getPropertySources().addLast(new PropertySourceX(...));
A warning about instance variable access
Instance variables declared in subclasses and having default initial values should not be accessed from within this method. Due to Java object creation lifecycle constraints, any initial value will not yet be assigned when this callback is invoked by theAbstractEnvironment()
constructor, which may lead to aNullPointerException
or other problems. If you need to access default values of instance variables, leave this method as a no-op and perform property source manipulation and instance variable access directly within the subclass constructor. Note that assigning values to instance variables is not problematic; it is only attempting to read default values that must be avoided.
getReservedDefaultProfiles
protected Set<String> getReservedDefaultProfiles()
Return the set of reserved default profile names. This implementation returns "default". Subclasses may override in order to customize the set of reserved names.
getActiveProfiles
public String[] getActiveProfiles()
从接口复制的说明:Environment
Return the set of profiles explicitly made active for this environment. Profiles are used for creating logical groupings of bean definitions to be registered conditionally, for example based on deployment environment. Profiles can be activated by setting "spring.profiles.active" as a system property or by callingConfigurableEnvironment.setActiveProfiles(String...)
.If no profiles have explicitly been specified as active, then any default profiles will automatically be activated.
doGetActiveProfiles
protected Set<String> doGetActiveProfiles()
Return the set of active profiles as explicitly set throughsetActiveProfiles(java.lang.String...)
or if the current set of active profiles is empty, check for the presence of the "spring.profiles.active" property and assign its value to the set of active profiles.
setActiveProfiles
public void setActiveProfiles(String... profiles)
从接口复制的说明:ConfigurableEnvironment
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
ConfigurableEnvironment.addActiveProfile(java.lang.String)
to add a profile while preserving the existing set.
addActiveProfile
public void addActiveProfile(String profile)
从接口复制的说明:ConfigurableEnvironment
Add a profile to the current set of active profiles.
getDefaultProfiles
public String[] getDefaultProfiles()
从接口复制的说明:Environment
Return the set of profiles to be active by default when no active profiles have been set explicitly.
doGetDefaultProfiles
protected Set<String> doGetDefaultProfiles()
Return the set of default profiles explicitly set viasetDefaultProfiles(String...)
or if the current set of default profiles consists only of reserved default profiles, then check for the presence of the "spring.profiles.default" property and assign its value (if any) to the set of default profiles.
setDefaultProfiles
public 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...)
.Calling this method removes overrides any reserved default profiles that may have been added during construction of the environment.
acceptsProfiles
@Deprecated public boolean acceptsProfiles(String... profiles)
已过时。从接口复制的说明:Environment
Return whether one or more of the given profiles is active or, in the case of no explicit active profiles, whether one or more of the given profiles is included in the set of default profiles. If a profile begins with '!' the logic is inverted, i.e. the method will returntrue
if the given profile is not active. For example,env.acceptsProfiles("p1", "!p2")
will returntrue
if profile 'p1' is active or 'p2' is not active.
acceptsProfiles
public boolean acceptsProfiles(Profiles profiles)
从接口复制的说明:Environment
Return whether the active profiles match the givenProfiles
predicate.- 指定者:
acceptsProfiles
在接口中Environment
isProfileActive
protected boolean isProfileActive(String profile)
Return whether the given profile is active, or if active profiles are empty whether the profile should be active by default.
validateProfile
protected void validateProfile(String profile)
Validate the given profile, called internally prior to adding to the set of active or default profiles.Subclasses may override to impose further restrictions on profile syntax.
- 抛出:
IllegalArgumentException
- if the profile is null, empty, whitespace-only or begins with the profile NOT operator (!).- 另请参阅:
acceptsProfiles(java.lang.String...)
,addActiveProfile(java.lang.String)
,setDefaultProfiles(java.lang.String...)
getPropertySources
public MutablePropertySources getPropertySources()
从接口复制的说明:ConfigurableEnvironment
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
public Map<String,Object> getSystemProperties()
从接口复制的说明:ConfigurableEnvironment
Return the value ofSystem.getProperties()
if allowed by the currentSecurityManager
, otherwise return a map implementation that will attempt to access individual keys using calls toSystem.getProperty(String)
.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.Calls to
Map.get(Object)
on the Map returned will never throwIllegalAccessException
; in cases where the SecurityManager forbids access to a property,null
will be returned and an INFO-level log message will be issued noting the exception.
getSystemEnvironment
public Map<String,Object> getSystemEnvironment()
从接口复制的说明:ConfigurableEnvironment
Return the value ofSystem.getenv()
if allowed by the currentSecurityManager
, otherwise return a map implementation that will attempt to access individual keys using calls toSystem.getenv(String)
.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.Calls to
Map.get(Object)
on the Map returned will never throwIllegalAccessException
; in cases where the SecurityManager forbids access to a property,null
will be returned and an INFO-level log message will be issued noting the exception.
suppressGetenvAccess
protected boolean suppressGetenvAccess()
Determine whether to suppressSystem.getenv()
/System.getenv(String)
access for the purposes ofgetSystemEnvironment()
.If this method returns
true
, an empty dummy Map will be used instead of the regular system environment Map, never even trying to callgetenv
and therefore avoiding security manager warnings (if any).The default implementation checks for the "spring.getenv.ignore" system property, returning
true
if its value equals "true" in any case.
merge
public void merge(ConfigurableEnvironment parent)
从接口复制的说明:ConfigurableEnvironment
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
.- 指定者:
merge
在接口中ConfigurableEnvironment
- 参数:
parent
- the environment to merge with- 另请参阅:
AbstractApplicationContext.setParent(org.springframework.context.ApplicationContext)
getConversionService
public ConfigurableConversionService getConversionService()
从接口复制的说明:ConfigurablePropertyResolver
Return theConfigurableConversionService
used when performing type conversions on properties.The configurable nature of the returned conversion service allows for the convenient addition and removal of individual
Converter
instances:ConfigurableConversionService cs = env.getConversionService(); cs.addConverter(new FooConverter());
setConversionService
public void setConversionService(ConfigurableConversionService conversionService)
从接口复制的说明:ConfigurablePropertyResolver
Set theConfigurableConversionService
to be used when performing type conversions on properties.Note: as an alternative to fully replacing the
ConversionService
, consider adding or removing individualConverter
instances by drilling intoConfigurablePropertyResolver.getConversionService()
and calling methods such as#addConverter
.
setPlaceholderPrefix
public void setPlaceholderPrefix(String placeholderPrefix)
从接口复制的说明:ConfigurablePropertyResolver
Set the prefix that placeholders replaced by this resolver must begin with.
setPlaceholderSuffix
public void setPlaceholderSuffix(String placeholderSuffix)
从接口复制的说明:ConfigurablePropertyResolver
Set the suffix that placeholders replaced by this resolver must end with.
setValueSeparator
public void setValueSeparator(@Nullable String valueSeparator)
从接口复制的说明:ConfigurablePropertyResolver
Specify the separating character between the placeholders replaced by this resolver and their associated default value, ornull
if no such special character should be processed as a value separator.
setIgnoreUnresolvableNestedPlaceholders
public void setIgnoreUnresolvableNestedPlaceholders(boolean ignoreUnresolvableNestedPlaceholders)
从接口复制的说明:ConfigurablePropertyResolver
Set whether to throw an exception when encountering an unresolvable placeholder nested within the value of a given property. Afalse
value indicates strict resolution, i.e. that an exception will be thrown. Atrue
value indicates that unresolvable nested placeholders should be passed through in their unresolved ${...} form.Implementations of
PropertyResolver.getProperty(String)
and its variants must inspect the value set here to determine correct behavior when property values contain unresolvable placeholders.
setRequiredProperties
public void setRequiredProperties(String... requiredProperties)
从接口复制的说明:ConfigurablePropertyResolver
Specify which properties must be present, to be verified byConfigurablePropertyResolver.validateRequiredProperties()
.
validateRequiredProperties
public void validateRequiredProperties() throws MissingRequiredPropertiesException
从接口复制的说明:ConfigurablePropertyResolver
Validate that each of the properties specified byConfigurablePropertyResolver.setRequiredProperties(java.lang.String...)
is present and resolves to a non-null
value.- 指定者:
validateRequiredProperties
在接口中ConfigurablePropertyResolver
- 抛出:
MissingRequiredPropertiesException
- if any of the required properties are not resolvable.
containsProperty
public boolean containsProperty(String key)
从接口复制的说明:PropertyResolver
Return whether the given property key is available for resolution, i.e. if the value for the given key is notnull
.- 指定者:
containsProperty
在接口中PropertyResolver
getProperty
@Nullable public String getProperty(String key)
从接口复制的说明:PropertyResolver
Return the property value associated with the given key, ornull
if the key cannot be resolved.- 指定者:
getProperty
在接口中PropertyResolver
- 参数:
key
- the property name to resolve- 另请参阅:
PropertyResolver.getProperty(String, String)
,PropertyResolver.getProperty(String, Class)
,PropertyResolver.getRequiredProperty(String)
getProperty
public String getProperty(String key, String defaultValue)
从接口复制的说明:PropertyResolver
Return the property value associated with the given key, ordefaultValue
if the key cannot be resolved.- 指定者:
getProperty
在接口中PropertyResolver
- 参数:
key
- the property name to resolvedefaultValue
- the default value to return if no value is found- 另请参阅:
PropertyResolver.getRequiredProperty(String)
,PropertyResolver.getProperty(String, Class)
getProperty
@Nullable public <T> T getProperty(String key, Class<T> targetType)
从接口复制的说明:PropertyResolver
Return the property value associated with the given key, ornull
if the key cannot be resolved.- 指定者:
getProperty
在接口中PropertyResolver
- 参数:
key
- the property name to resolvetargetType
- the expected type of the property value- 另请参阅:
PropertyResolver.getRequiredProperty(String, Class)
getProperty
public <T> T getProperty(String key, Class<T> targetType, T defaultValue)
从接口复制的说明:PropertyResolver
Return the property value associated with the given key, ordefaultValue
if the key cannot be resolved.- 指定者:
getProperty
在接口中PropertyResolver
- 参数:
key
- the property name to resolvetargetType
- the expected type of the property valuedefaultValue
- the default value to return if no value is found- 另请参阅:
PropertyResolver.getRequiredProperty(String, Class)
getRequiredProperty
public String getRequiredProperty(String key) throws IllegalStateException
从接口复制的说明:PropertyResolver
Return the property value associated with the given key (nevernull
).- 指定者:
getRequiredProperty
在接口中PropertyResolver
- 抛出:
IllegalStateException
- if the key cannot be resolved- 另请参阅:
PropertyResolver.getRequiredProperty(String, Class)
getRequiredProperty
public <T> T getRequiredProperty(String key, Class<T> targetType) throws IllegalStateException
从接口复制的说明:PropertyResolver
Return the property value associated with the given key, converted to the given targetType (nevernull
).- 指定者:
getRequiredProperty
在接口中PropertyResolver
- 抛出:
IllegalStateException
- if the given key cannot be resolved
resolvePlaceholders
public String resolvePlaceholders(String text)
从接口复制的说明:PropertyResolver
Resolve ${...} placeholders in the given text, replacing them with corresponding property values as resolved byPropertyResolver.getProperty(java.lang.String)
. Unresolvable placeholders with no default value are ignored and passed through unchanged.- 指定者:
resolvePlaceholders
在接口中PropertyResolver
- 参数:
text
- the String to resolve- 返回:
- the resolved String (never
null
) - 另请参阅:
PropertyResolver.resolveRequiredPlaceholders(java.lang.String)
resolveRequiredPlaceholders
public String resolveRequiredPlaceholders(String text) throws IllegalArgumentException
从接口复制的说明:PropertyResolver
Resolve ${...} placeholders in the given text, replacing them with corresponding property values as resolved byPropertyResolver.getProperty(java.lang.String)
. Unresolvable placeholders with no default value will cause an IllegalArgumentException to be thrown.- 指定者:
resolveRequiredPlaceholders
在接口中PropertyResolver
- 返回:
- the resolved String (never
null
) - 抛出:
IllegalArgumentException
- if given text isnull
or if any placeholders are unresolvable