将配置文件中的配置,映射到类中,和类的属性一一对应。通常有两种方法:
@ConfigurationProperties
@Value
无论配置文件是yml还是properties他们都能获取到值。
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
注意@Value不支持想Map,List,Set等复杂类型的封装。
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中基本类型的某些项的值,可以使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@ConfigurationProperties
就是将配置文件中配置的每一个属性的值,映射到这个组件中
@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; 其中属性prefix = "person"表示:配置文件中哪个下面的所有属性进行一一映射 。
注意只有这个组件是容器中的组件,才能使容器提供的@ConfigurationProperties功能有效;
(这点很明白,你既然让spring容器自动帮你封装,前提当然你得在人家的容器中啦)
示例:
@Component//添加到容器
@ConfigurationProperties(prefix = "person")//指定配置文件中person配置项下面的所有属性与该类进行一一映射
@Validated//开启JSR校验
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
* <bean/>
*/
@Email//JSR校验该属性必须是邮箱格式
//@Value("${person.last-name}")//@Value和@ConfigurationProperties不能同用
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;