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

参考:https://www.kancloud.cn/hanxt/springboot2/1761168

posted @ 2022-08-07 11:23  离人怎挽_wdj  阅读(258)  评论(0编辑  收藏  举报