-
Notifications
You must be signed in to change notification settings - Fork 41.6k
Canonical properties
Canonical properties allow spring boot applications to access properties from underlying sources in a uniform manner. No matter what format is used by the underlying source, Spring Boot application can always use a canonical name to obtain it.
A canonical name is composed of elements separated in dots.
The last dot separates the prefix from the property name.
Names are alpha-numeric (a-z 0-9) and must be lowercase, the only other characters permitted are [ and ] which are used to indicate indexes.
A property name cannot start with a number.
A typical Spring Boot canonical property would be something like spring.jpa.databaseplatform=mysql.
An indexed property would be spring.myexample.url[0]=https://example.com.
Simple properties are converted into the canonical by removing any special characters and converting to lowercase.
For example, the following YAML properties all result in the mapping spring.jpa.databaseplatform=mysql:
spring.jpa.database-platform=mysql
spring.jpa.databasePlatform=mysql
spring.JPA.database_platform=mysql|
Note
|
We recommend that properties are stored in lowercase kabab format. i.e. my.property-name=foo.
|
List types in properties files should be referenced using [ ] notation:
spring.my-example.url[0]=https://example.com
spring.my-example.url[1]=https://spring.ioAn abbreviated form is also supported:
spring.my-example.url[]=https://example.com,https://spring.io|
Note
|
The [] indicator is required for list types.
For example, spring.example.foo=`bar,baz is a property containing the String "bar,baz"
, and not a list of two elements.
|
Both of the mappings above result in the following properties:
spring.myexample.url[0]=https://example.com
spring.myexample.url[1]=https://spring.ioSimple YAML properties are converted into the canonical by removing any special characters and converting to lowercase.
For example, the following YAML properties all result in the mapping spring.jpa.databaseplatform=mysql:
spring:
jpa:
database-platform: mysql
databasePlatform: mysql
database_platform: mysql|
Note
|
We recommend that properties are stored in yaml in lowercase kabab format. i.e. my.property-name=foo.
|
YAML list type may be specified in the standard or abbreviated form:
spring:
my-example:
url:
- https://example.com
- https://spring.iospring:
my-example:
url: [https://example.com, http:s//spring.io]Both are mapped as follows:
spring.myexample.url[0]=https://example.com
spring.myexample.url[1]=https://spring.io|
Note
|
Simple comma-separated types should not be used to represent lists.
For example, spring.example.foo=`bar,baz is a property containing the String "bar,baz"
, and not a list of two elements.
|
Environment variables are converted into the canonical form by lowercasing and replacing _ with ..
For example: SPRING_JPA_DATABASEPLATFORM=mysql results in the property spring.jpa.databaseplatform=mysql.
|
Note
|
The _ delimiter must not be used within a property name. i.e. database-platform must be written as DATABASEPLATFORM and not DATABASE_PLATFORM.
|
The [ and ] characters cannot be used in environment variable names so instead a special form of _ is used.
Any numeric value surrounded by underscores is converted to the [,] form. For example:
-
MY_FOO_1_=my.foo[1] -
MY_FOO_1_BAR=my.foo[1].bar -
MY_FOO_1_2_=my.foo[1][2]`
In addition, if an environment variable ends in a number the trailing _ may be omitted:
-
MY_FOO_1=my.foo[1] -
MY_FOO_1_2=my.foo[1][2]`
System properties are converted into canonical form by lowercasing and removing any special characters.
For example, the following command line parameters will all result in spring.jpa.databaseplatform=mysql :
-Dspring.jpa.database-platform=mysql -Dspring.jpa.databasePlatform=mysql -Dspring.JPA.database_platform=mysql
List types in system properties should be referenced using [ ] notation:
-D"spring.my-example.url[0]=https://example.com"
-D"spring.my-example.url[1]=https://spring.io"An abbreviated form is also supported:
-Dspring.my-example.url[]=https://example.com,https://spring.ioBoth of the mappings above result in the following properties:
spring.myexample.url[0]=https://example.com
spring.myexample.url[1]=https://spring.io|
Note
|
The [] indicator is required for list types.
For example, spring.example.foo=bar,baz is a property containing the String "bar,baz"
, and not a list of two elements.
|