Class 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:
  • 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:
    • 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.