在 application.properties(全局配置文件中)中,有一下属性。person.lastName=张三
person.age=22
person.birth=2018/2/13
person.boss=false
person.lists=a,b,b
person.maps.k1=4
person.maps.k2=45
person.dog.name=dog
person.dog.age=5
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个一个注入 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL语法( #{ } ) | 不支持 | 支持 |
JSR303数据校验 |
支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
功能
在实体中注入
@ConfigurationProperties(prefix = "person")
或者
一个一个的注入,如下
松散绑定(松散语法)
person.last-name与person.lastName是一个意思
属性名匹配规则(Relaxed Binding)
- – person.firstName:使用标准方式
- – person.first-name:大写用–
- – person.first_name:大写用_
- – PERSON_FIRST_NAME: 推荐系统属性使用这种写法
SpEL语法(#{ })
扫描二维码关注公众号,回复:
10566389 查看本文章
运行后,会输出 age=22
JSR303数据校验
加入下面的两个语句,即校验lastName是不是邮箱,运行的时候会报错。
运行结果报错
复杂类型封装
下图的方式是会报错的
总结
- 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某个项值,使用@Value
- 如果说,我们专门编写了一个JavaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties
- @ConfigurationProperties 被注解的类还需要 @Component 注,否则使用的时候找不到
案例(@ConfigurationProperties)
limit:
minMoney: 0.01
maxMoney: 9999
description: 最少要发${limit.minMoney}元, 最多${limit.maxMoney}元
package com.imooc.luckymoney;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@Component
@ConfigurationProperties(prefix = "limit")
public class LimitConfig {
private BigDecimal minMoney;
private BigDecimal maxMoney;
private String description;
public BigDecimal getMinMoney() {
return minMoney;
}
public void setMinMoney(BigDecimal minMoney) {
this.minMoney = minMoney;
}
public BigDecimal getMaxMoney() {
return maxMoney;
}
public void setMaxMoney(BigDecimal maxMoney) {
this.maxMoney = maxMoney;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
- 这里的属性名和yml里的必须要一致。