基本语法
k:(空格) v表示一对键值对(空格必须要)
以空格的缩进来控制层级关系;只要是左对齐的一组数据,都是同一层级关系
server:
port: 8070
path: /test
属性值区分大小写
对象、Map(属性和值)(键值对)
k: v下一行写对象和属性的对应关系,注意缩进
对象还是k: v
person:
name: zhangsan
age: 18
行内写法:
person: {name: zhangsan,age: 18}
数组(List、set)
animals:
- cat
- dog
- pig
行内写法:
animals: [cat,dog,pig]
占位符
person:
#在名字后加一段随机字符
Name: zhansan${random.uuid}
#随机数
Age: ${random.int}
Boss: true
Birth: 1998/01/01
Maps: {k1: v1,k2: v2}
Lists:
- lisi
- wangwu
dog:
#输出zhangsan_dog
#name:${person.hello:hello}_dog输出hello_dog
# person没有hello属性,:后面为默认值
name: ${person.name)_dog
age: 2
应用
实体类
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String Name;
private int Age;
private boolean Boss;
private Date Birth;
private List Lists;
private Map Maps;
private Dog Dog;
//省略get、set方法和toString方法
}
public class Dog {
private String name;
private int age;
}
application.yml文件:
person:
Name: zhansan
Age: 18
Boss: true
Birth: 1998/01/01
Maps: {k1: v1,k2: v2}
Lists:
- lisi
- wangwu
dog:
name: xiaogou
age: 2
执行结果:
松散绑定
@ConfigurationProperties(prefix = “”) | @value | |
---|---|---|
功能 | 支持批量注入配置文件中的属性 | 一个个注入 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL语言 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
SpEl基本语法实例:#{11*3}
${key}:从环境变量、配置文件中获取值
JSR303数据校验:应用标签 @Validated
@Value("${person.age}")
private int Age;
复杂类型封装:map,list,对象等的封装
总结:如果是在某项业务逻辑中需要获取某项值,使用@value注解
关于在另外的yml文件中引用,而非application.yml中
使用@PropertySource(value = {“classpath:person.yml”})标签
package com.example.demo.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;
/*
* @PropertySource标签用于引用其他的yml文件
* */
@PropertySource(value = {"classpath:person.yml"})
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
//Name必须为邮箱格式
//@Email
private String Name;
//@Value("${person.age}")
private int Age;
private boolean Boss;
private Date Birth;
private List Lists;
private Map Maps;
private Dog Dog;
//省略get、set、toString
}
person.yml
person:
Name: zhansan
Age: 18
Boss: true
Birth: 1998/01/01
Maps: {k1: v1,k2: v2}
Lists:
- lisi
- wangwu
dog:
name: xiaogou
age: 2
其中在实际写代码过程中,yml文件开头需要两个空格,否则无法识别