hooyantsing's Blog

白银篇_P3_YAML配置绑定变量的两种方式

字数统计: 484阅读时长: 2 min
2020/07/17

YAML配置绑定变量的两种方式

20年全新-Spring Boot 2.x从青铜到王者之白银篇-打造精品中的精品-程序员-编程-架构师-SpringBoot

读取yml配置文件,将属性值绑定到程序的变量上去。

SpringBoot提供两种注解,应用场景不同

  • @Value
  • @ConfigurationProperties

    @Value

方法 将yml的值传入变量里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package xyz.hooy.demo.silver.p3;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Data
@Component
public class Family {

@Value("${family.family-name}")
private String familyName;

}

扩展:@Component 注解

@Component 将这个类交给Spring管理,不清楚属于哪一层时使用。

  • @Repository 持久层
  • @Service 服务层
  • @Controller 控制层

@ConfigurationProperties

prefix 前缀,yml里字段名

将yml数据整体传入对象里

  • 与@Value不同:@Value是将单个值传入变量里,而@ConfigurationProperties注解是将prefix字段下的所有都传入对象里。
  • java的数据结构要和yml的数据结构一致。
    例:

yml数据结构

application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
family:
family-name: "happy family"
father:
name: zimug
age: 18
mother:
alias:
- lovely
- ailice
child:
name: Hooy
age: 18
friends:
- hobby: football
sex: male
- hobby: basketball
sex: female

Java数据结构

Family.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package xyz.hooy.demo.silver.p3;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "family")
public class Family {
private String familyName;
private Father father;
private Mother mother;
private Child child;
}

Father.java

1
2
3
4
5
6
7
8
9
package xyz.hooy.demo.silver.p3;

import lombok.Data;

@Data
public class Father {
private String name;
private Integer age;
}

Mother.java

1
2
3
4
5
6
7
8
package xyz.hooy.demo.silver.p3;

import lombok.Data;

@Data
public class Mother {
private String[] alias;
}

Child.java

1
2
3
4
5
6
7
8
9
10
package xyz.hooy.demo.silver.p3;

import lombok.Data;

@Data
public class Child {
private String name;
private Integer age;
private Friend[] friends;
}

Friend.java

1
2
3
4
5
6
7
8
9
package xyz.hooy.demo.silver.p3;

import lombok.Data;

@Data
public class Friend {
private String hobby;
private String sex;
}

@Value 和 @ConfigurationProperties 对比

|功能 |批量注入属性到java类|一个个属性指定注入|
|松散语法绑定 |支持 |不支持 |
|复杂数据类型(对象、数组)|支持 |不支持 |
|JSR303数据校验 |支持 |不支持 |
|SpEL |不支持 |支持 |

CATALOG
  1. 1. YAML配置绑定变量的两种方式
    1. 1.0.1. @Value
    2. 1.0.2. @ConfigurationProperties
  2. 1.1. @Value 和 @ConfigurationProperties 对比