From 416cfc2c865054a59909ba796fc2a7f438bfc387 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Thu, 23 Apr 2020 16:37:23 -0700 Subject: [PATCH] Improve @Value documentation Improve "@ConfigurationProperties vs. @Value" documentation with the recommendation that kebab-case is used with the `@Value` annotation. Closes gh-20507 --- .../src/main/asciidoc/spring-boot-features.adoc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 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 79581cc6136..12f0b3026c3 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 @@ -1303,7 +1303,7 @@ The following table summarizes the features that are supported by `@Configuratio | <> | Yes -| No +| Limited (see note below) | <> | Yes @@ -1315,7 +1315,12 @@ The following table summarizes the features that are supported by `@Configuratio |=== If you define a set of configuration keys for your own components, we recommend you group them in a POJO annotated with `@ConfigurationProperties`. -You should also be aware that, since `@Value` does not support relaxed binding, it is not a good candidate if you need to provide the value by using environment variables. +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). +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 <>.