Default ConfigSources

By default, a MicroProfile Config implementation must provide three sources of configuration:

  • System properties from the Java virtual machine (with an ordinal of 400)
  • Environment variables (with an ordinal of 300)
  • Properties stored in META-INF/microprofile-config.properties (with an ordinal of 100)
The ordinal value of a config source determines the precedence of the config source. In particular, if a property is defined both in the system properties and the environment variables, the value will be taken from the system properties (which has a higher ordinal than the environment variables).

There are no restrictions on the names of properties. However, some operating systems can impose some restrictions on the name of the environment variables (for example, "." is not allowed by most Unix shells). If you have a property that could be configured from the environment variables, you have to name your property accordingly.

For example, the property name my_url can be used by an environment variable while my.url cannot.

New in MicroProfile Config 1.3
MicroProfile Config 1.3 introduces a mapping rule from the config property name to the environment variable. This rule searches three environment variable variants for each property name:
  • Exact match
  • Replace any non-alphanumeric character with _
  • Replace any non-alphanumeric character with _ and use uppercase
This means that, in the Java application, we can have a property named  app.auth.url  and use the  APP_AUTH_URL  environment variable to configure it.

Let's move on to the other type of configuration source.