SpringBoot--properties配置、@Valuehe @ConfigurationProperties对比、配置文件注入值数据校验

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

注入方式:

  1. 使用@ConfigurationProperties注解可以获取到配置信息。
  2. 使用@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 {

    /**
     * 
     *      
     * 
     */

   //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;

你可能感兴趣的:(Spring,Boot)