为什么要讨论这个问题, 工作中一个同事写的类使用了ConfigurationProperties, 只提供了标准的setter方法. 属性的访问, 提供了定制的方法. 可以参考EurekaClientConfigBean.

他使用的是spring boot 2.0.0.M5版本, 可以正常获取配置文件中的属性值, 但是在1.5.8.RELEASE获取不到.

看下文档和源码:

Annotation for externalized configuration. Add this to a class definition or a @Bean method in a @Configuration class if you want to bind and validate some external Properties (e.g. from a .properties file).

外置配置的注解. 当需要绑定外置配置(如properties或者yaml配置)的时候, 将其加到使用了@Configuration注解的类声明处或者@Bean标注的方法上.

值的绑定是通过ConfigurationPropertiesBindingPostProcessor在bean实例创建后, 初始化回调(如InitializingBeanafterPropertiesSet方法)或者init-method之前之前完成的.

1.5.x

执行绑定的时候如果找不到getter方法, 会抛出RelaxedBindingNotWritablePropertyException异常. debug模式下, 会打印Ignoring benign property binding failure.

2.x

2.x版本中, 如果找不到getter方法, 会将原值默认为null, 并继续执行绑定.