When using @ConfigurationProperties
, the camelCase variable names are resolved correctly from environment variables when they contain an _
character between the camelcase parts.
Version
The issue was discovered on 2.1.5
, but also confirmed on 2.4.3
.
Details
Given an app with a configuration property props.confValue
in the application.yml
, if users try to use an the environment value PROPS_CONF_VALUE
they resolve to different values if they use @ConfigurationProperties
compared to using @Value("props.confValue")
.
application.yml
props:
confValue: defaultValue
Using @ConfigurationProperties
@ConfigurationProperties("props")
class ConfigProps {
var confValue: String? = null
}
Using @Value
@Component
class AutowiredValueBean() {
@Value("\${props.confValue}")
lateinit var confValue: String
}
Test cases:
Starting the app with PROPS_CONF_VALUE=envValue
results in
- ConfigProps.confValue
having the value of envValue
- AutowiredValueBean.confValue
having the value of defaultValue
Starting the app with PROPS_CONFVALUE=envValue
results in
- ConfigProps.confValue
having the value of envValue
- AutowiredValueBean.confValue
having the value of envValue
A reproduction of the issue can be found here.
Comment From: snicoll
Thanks for the sample.
There's a note in the reference guide about this. Rather than using props.confValue
you should be using props.conf-value
so that the same rules apply.