Package org.springframework.core.env

# Class SystemEnvironmentPropertySource

java.lang.Object
org.springframework.core.env.PropertySource<T>
org.springframework.core.env.EnumerablePropertySource<Map<String,Object>>
org.springframework.core.env.MapPropertySource
org.springframework.core.env.SystemEnvironmentPropertySource

public class SystemEnvironmentPropertySource extends MapPropertySource
Specialization of `MapPropertySource` designed for use with system environment variables. Compensates for constraints in Bash and other shells that do not allow for variables containing the period character and/or hyphen character; also allows for uppercase variations on property names for more idiomatic shell use.

For example, a call to `getProperty("foo.bar")` will attempt to find a value for the original property or any 'equivalent' property, returning the first found:

- `foo.bar` - the original name
- `foo_bar` - with underscores for periods (if any)
- `FOO.BAR` - original, with upper case
- `FOO_BAR` - with underscores and upper case

Any hyphen variant of the above would work as well, or even mix dot/hyphen variants.

The same applies for calls to `containsProperty(String)`, which returns `true` if any of the above properties are present, otherwise `false`.

This feature is particularly useful when specifying active or default profiles as environment variables. The following is not allowable under Bash:

    spring.profiles.active=p1 java -classpath ... MyApp

However, the following syntax is permitted and is also more conventional:

    SPRING_PROFILES_ACTIVE=p1 java -classpath ... MyApp

Enable debug- or trace-level logging for this class (or package) for messages explaining when these 'property name resolutions' occur.

This property source is included by default in `StandardEnvironment` and all its subclasses.

Since:
  3.1
Author:
  Chris Beams, Juergen Hoeller
See Also:
  - `StandardEnvironment`
  - `AbstractEnvironment.getSystemEnvironment()`
  - `AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME`

## Nested Class Summary

## Nested classes/interfaces inherited from class org.springframework.core.env.PropertySource

`PropertySource.StubPropertySource`

## Field Summary

### Fields inherited from class org.springframework.core.env.PropertySource

`logger, name, source`

## Constructor Summary

Constructors
Constructor
Description
`SystemEnvironmentPropertySource(String name, Map<String,Object> source)`
Create a new `SystemEnvironmentPropertySource` with the given name and delegating to the given `MapPropertySource`.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`containsProperty(String name)`
Return `true` if a property with the given name or any underscore/uppercase variant thereof exists in this property source.
`Object`
`getProperty(String name)`
This implementation returns `true` if a property with the given name or any underscore/uppercase variant thereof exists in this property source.
`protected final String`
`resolvePropertyName(String name)`
Check to see if this property source contains a property with the given name, or any underscore / uppercase variation thereof.

### Methods inherited from class org.springframework.core.env.MapPropertySource

`getPropertyNames`

### Methods inherited from class org.springframework.core.env.PropertySource

`equals, getName, getSource, hashCode, named, toString`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Constructor Details

### SystemEnvironmentPropertySource

public SystemEnvironmentPropertySource(String name, Map<String,Object> source)
Create a new `SystemEnvironmentPropertySource` with the given name and delegating to the given `MapPropertySource`.

## Method Details

### containsProperty

public boolean containsProperty(String name)
Return `true` if a property with the given name or any underscore/uppercase variant thereof exists in this property source.

Overrides:
  `containsProperty` in class `MapPropertySource`
Parameters:
  `name` - the name of the property to find

### getProperty

@Nullable public Object getProperty(String name)
This implementation returns `true` if a property with the given name or any underscore/uppercase variant thereof exists in this property source.

Overrides:
  `getProperty` in class `MapPropertySource`
Parameters:
  `name` - the property to find
See Also:
  - `PropertyResolver.getRequiredProperty(String)`

### resolvePropertyName

protected final String resolvePropertyName(String name)
Check to see if this property source contains a property with the given name, or any underscore / uppercase variation thereof. Return the resolved name if one is found or otherwise the original name. Never returns `null`.