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
    Modifier and Type | Method and 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)` 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)`