一、外部配置.yml和.properties文件的写法
1、.yml写法
#普通key-value
#注意:对空格的要求十分严格
#字符串默认不用加上单引号或双引号
# 加上双引号:不会转义字符串里面的特殊字符 如果有
输出就会换行
# 加上单引号:会转义特殊字符 如果有
输出也是
name: lxy
#对象
student:
name: lxy
age: 24
#行内写法
teacher: {name: lisi, age: 24}
#数组
pets:
- cat
- dog
- pig
pet: [cat,dog,pig]
person:
name: 张三${random.uuid}
age: 24
job: true
map: {k1: v1,k2: v2}
list:
- code
- game
- girls
birth: 1995/1/18
dog:
name: ${person.name:默认值}_小黑
age: 4
2、.properties写法
#key=value
name=lxy
student.name=lxy
student.age=24
dog.color=白色
二、取值
1、@Value
@Component
public class Dog {
@Value("#{'旺财'}")
private String name;
@Value("#{11*2}")
private int age;
@Value("${dog.color}")
private String color;
}
2、@ConfigurationProperties
1 @Component
2 //通过.yaml文件来注入属性值
3 @ConfigurationProperties(prefix = "person")
4 @Validated //JSR303校验
5 public class Person {
6 @Email
7 private String name;
8 private int age;
9 private boolean job;
10 private Map<String, Object> map;
11 private List<Object> list;
12 private Date birth;
13 private Dog dog;
三、@Value获取值和@ConfigurationProperties获取值得区别
相同点:这两个注解都可以通过配置文件yml 或 properties获取到值
区别
@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定 支持 不支持
SpEL 不支持 支持
JSR303校验 支持 不支持
复杂类型封装 支持 不支持
四、配置文件加载路径优先级(由高到低)
1、-file:./cofig/
2、-file:./
3、-classpath:/config/
4、-classpath:/
注意:高优先级的文件配置会覆盖低优先级配置。不是说高优先级的配置文件存在,低优先级的配置文件就不起作用。所有的配置会形成互补配置
我们也可以通过spring.config.location来改变默认配置