properties配置
示例:
#idea的properties配置文件默认为utf-8编码
person.last-name=张三
person.age=18
person.birth=2017/12/15
person.boss=false
person.map.k1=v1
person.map.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15
注入方式:
- 使用@ConfigurationProperties注解可以获取到配置信息。
- 使用@Value注解手动注入
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
@Value("${person.last-name}")//可以使用${}获取配置信息
private String lastName;
@Value("#{11*2}")//可以使用Spring的#{}表达式
private Integer age;
@Value("true")//可以使用字面量
private Boolean boss;
private Date birth;
private Map<String,Object> map;
private List<Object> lists;
private Dog dog;
...
}
@Valuehe @ConfigurationProperties对比
Feature | @ConfigurationProperties | @Value |
---|---|---|
Relaxed binding(松散绑定) | Yes | No |
Meta-data support(数据校验) | Yes | No |
SpEL | No | Yes |
复杂类型封装 | Yes | No |
属性名匹配规则(Relaxed bingding)
- person.firstName:使用标准方式
- person.first-name:大写用-
- person.first_name:大写用_
- PERSON_FIRST_NAME:推荐使用
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
配置文件注入值数据校验
@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}")
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;