yaml通过@ConfigurationProperties和@value方式注入值
a.绑定值的两种方式:绑定值的两种方式:
@ConfigurationProperties @value
1.优先级:如果两者混用@ConfigurationProperties的优先级比@value的优先级高,但是二者可以互补;
2.@ConfigurationProperties中的数据来源与application.yml和applicaiton.properties文件,
@value的数据是写死的,来源与配置文件无关;
3.@ConfigurationProperties批量注入,@value单个注入;
4.松散语法:(nickName-->nick-name(驼峰-->-的形式))
@ConfigurationProperties支持,@value不支持;
5.SpEL:@ConfigurationProperties不支持,@value支持;
6.JSR303数据校验:
@ConfigurationProperties支持,@value不支持;
7.注入复杂类型
@ConfigurationProperties支持,@value不支持;
简单类型:基本类型,String,Date;
yml配置文件中;#批量注入属性
student:
id: 1
stuAge: 18
#stuAge = #{2*6} EL表达式不支持
stu-name: zhangsan #支持松散型语法
stuWeight: 62.6
sex: true
location: {province: 湖南省,city: 常德,zone: 石门}
hobbies: [吃饭,睡觉]
skills: [java,c#]
pet: {nickName: xiaohuang,strain: hsp}
email:[email protected]
javaBean中:
@Component
@ConfigurationProperties(prefix = "student")
@Validated //开启JSR303数据校验
public class Student {
private Integer id;
private String stuName;
private int stuAge;
private double weight;
private boolean sex;
private Map<String,Object> location;
private String[] hobbies;
private List<String> skills;
private Pet pet;
@Email
private String email;
}
//单个注入 注入外部配置文件对应的property,如果没有对应的属性则会报错@Component
@Validated //开启JSR303数据校验
public class Student {
@Value("1")
private Integer id;
@Value("${student.stuName}")//注入报错#不支持松散型语法(如果配置文件中是松散语法格式,报错)
private String stuName;
@Value("#{11*2}")//stuAge="22" 支持spEL表达式
private int stuAge;
@Value("${student.stu-weight}")//可以正常注入
private double stuWeight;
@Value("${student.sex}")
private boolean sex;
@Value("${student.location}")//不支持复杂类型报错
private Map<String,Object> location;
@Value("${student.hobbies}")//不支持复杂类型报错
private String[] hobbies;
@Value("${student.skills}")//不支持复杂类型报错
private List<String> skills;
@Value("${student.pet}")//不支持复杂类型报错
private Pet pet;
@Email//不会提示错误信息(不支持JSR303数据校验)
@Value("wwangtao.com")
private String email;
b.@PropertySource:
1.默认会加载application.yml和applicaiton.properties文件中的数据,如果数据不在这两个文件中,
需要通过该注解进行指定;
@PropertySource(value={"classpath:config.properties"})
2.该注解只能架子properties文件不能加载yml等其他文件;