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; 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

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
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.EnumerablePropertySource

`EMPTY_NAMES_ARRAY, logger`

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

`name, source`

### Constructor Summary

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

### Method Summary

Methods
`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)` Return the value associated with the given name, `null` if not found.

### 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 Detail

#### SystemEnvironmentPropertySource

    public SystemEnvironmentPropertySource(String name,
                                   Map<String,Object> source)

Create a new `SystemEnvironmentPropertySource` with the given name and delegating to the given `MapPropertySource`.

### Method Detail

#### 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 `EnumerablePropertySource<Map<String,Object>>`
Parameters:
  `name` - the property to find

#### getProperty

    public Object getProperty(String name)

Return the value associated with the given name, `null` if not found.

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)`