SpringBoot绑定变量
一、通过实体类配置整体前缀
application.yml
family:
family-name: "happy family"
father:
name: xiaoli
age: 18
mother:
alias:
- lovely
- ailice
child:
name: xiaoli
age: 5
friends:
- hobby: football
sex: male
- hobby: basketball
sex: female
Family
@Data
@Component
@ConfigurationProperties(prefix = "family") //表示配置的整体前缀
public class Family {
private String familyName; //成员变量名称要和yml配置项key一一对应
private Father father;
private Mother mother;
private Child child;
}
Father
@Data
public class Father {
private String name;
private Integer age;
}
Mother
@Data
public class Mother {
private String[] alias;
}
Friend
@Data
public class Friend {
private String hobby;
private String sex;
}
Child
@Data
public class Child {
private String name;
private Integer age;
private List<Friend> friends;
}
二、通过ConfigurationProperties进行整体的匹配
@Data
@Component
@ConfigurationProperties(prefix = "family1")
public class Family1 {
// @Value("${family1.family-name}")
private String familyName; //成员变量名称要和yml配置项key一一对应
private Map<String,String> father;
private Map<String, List<String>> mother;
如下通过@Value的方式会报错,但是在.properties文件中不会报错
@Data
@Component
//@ConfigurationProperties(prefix = "family1")
public class Family1 {
@Value("${family1.family-name}")
private String familyName; //成员变量名称要和yml配置项key一一对应
@Value("#{'${family1.father}") //如下通过@Value的方式会报错,但是在.properties文件中不会报错
private Map<String,String> father;
}
支持松散的语法 family-name = familyName = family_name 三种key都是一样的
三、加载额外的配置文件
employee.properties
employee.names=james,curry,zimug,姚明
employee.type=教练,球员,经理
employee.age={one:'27', two : '35', three : '34', four: '26'}
@Data
@Configuration
@PropertySource (name = "employeeProperties",
value = "classpath:employee.properties",
encoding = "utf-8")
public class Employee {
//使用SpEL读取employee.properties配置文件
@Value("#{'${employee.names}'}")
private String employeeNames;
// @Value ("#{'${employee.names}'.split(',')[0]}")
@Value("#{'${employee.names}'.split(',')}")
private List<String> employeeNamesList;
// @Value("#{${my.map}}")
//@Value ("#{${employee.age}.two}")
@Value ("#{${employee.age}}")
private Map <String,Integer> employeeAge;
}
四、配置属性值校验
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
@Data
@Component
@Validated
@ConfigurationProperties(prefix = "people")
public class People {
private String name;
@Min(25)
private int age;
}
I can feel you forgetting me。。 有一种默契叫做我不理你,你就不理我