Spring Boot小记(2)

@ConfigurationProperties与@Value区别

作者 Wavy Peng 日期 2018-05-04
Spring Boot小记(2)

比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL(Spring表达式) 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

解释

属性名匹配规则(Relaxed binding)

  • person.firstName:使用标准方式
  • person.first-name:大写用-
  • person.first_name:大写用_
  • PERSON_FIRST_NAME:推荐系统属性使用这种写法

数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEl}"></property>
* </bean>
*/
//lastName必须是邮箱格式
@Email
//@Value("${person.last-name}") //用@Value数据校验是无效的
private String lastName;
//@Value("#{11*2}") //测试SpEL
private Integer age;
//@Value("true")
private Boolean boss;

总结

配置文件yml还是properties两种方式都能获取到值;

如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果专门编写一个JavaBean来和配置文件进行映射,可以直接使用@ConfigurationProperties;