yaml通过@ConfigurationProperties和@value方式注入值

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} SPEL表达式不支持
     stu-name: zhangsan #支持松散型语法 对应javaBean stuName
     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 location;
    private  String[] hobbies;
    private List skills;
    private Pet pet;
     @Email  //支持JSR303数据校验
    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 location;
    @Value("${student.hobbies}")//不支持复杂类型报错
    private  String[] hobbies;
    @Value("${student.skills}")//不支持复杂类型报错
    private List 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等其他文件;

更多:https://www.imooc.com/article/47296

你可能感兴趣的:(springboot)