From d5980be6236e12ddc2c0dcbc650a731135d834fb Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 4 Nov 2020 17:40:27 +0000 Subject: [PATCH] Clarify documentation for relaxed binding of environment variables Closes gh-22974 --- .../src/main/asciidoc/spring-boot-features.adoc | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 31c3a74c464f..6de3471fe2fb 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -1185,9 +1185,6 @@ To convert a property name in the canonical-form to an environment variable name For example, the configuration property `spring.main.log-startup-info` would be an environment variable named `SPRING_MAIN_LOGSTARTUPINFO`. -NOTE: Underscores cannot be used to replace the dashes in property names. -If you attempt to use `SPRING_MAIN_LOG_STARTUP_INFO` with the example above, no value will be bound. - Environment variables can also be used when binding to object lists. To bind to a `List`, the element number should be surrounded with underscores in the variable name. @@ -1461,7 +1458,7 @@ The following table summarizes the features that are supported by `@Configuratio | <> | Yes -| Limited (see note below) +| Limited (see <>) | <> | Yes @@ -1472,15 +1469,15 @@ The following table summarizes the features that are supported by `@Configuratio | Yes |=== -If you define a set of configuration keys for your own components, we recommend you group them in a POJO annotated with `@ConfigurationProperties`. -Doing so will provide you with structured, type-safe object that you can inject into your own beans. - -If you do want to use `@Value`, we recommend that you refer to property names using their canonical form (kebab-case using only lowercase letters). +NOTE: [[boot-features-external-config-vs-value-note]] If you do want to use `@Value`, we recommend that you refer to property names using their canonical form (kebab-case using only lowercase letters). This will allow Spring Boot to use the same logic as it does when relaxed binding `@ConfigurationProperties`. For example, `@Value("{demo.item-price}")` will pick up `demo.item-price` and `demo.itemPrice` forms from the `application.properties` file, as well as `DEMO_ITEMPRICE` from the system environment. If you used `@Value("{demo.itemPrice}")` instead, `demo.item-price` and `DEMO_ITEMPRICE` would not be considered. -Finally, while you can write a `SpEL` expression in `@Value`, such expressions are not processed from <>. +If you define a set of configuration keys for your own components, we recommend you group them in a POJO annotated with `@ConfigurationProperties`. +Doing so will provide you with structured, type-safe object that you can inject into your own beans. + +While you can write a `SpEL` expression in `@Value`, such expressions are not processed from <>.