Spring Boot 使用一个全局的配置文件,配置文件名称是固定的: application*.yml|yaml|properties
。
Spring Boot 是基于约定的,所以很多配置都有默认值,配置文件的作用就是修改 Spring Boot 自动配置的默认值。
若想使用自定义的配置替换默认配置,可以编写 application.properties 或 application.yml(application.yaml)配置文件进行配置。
yaml 文件格式是 YAML Aint Markup Language 编写的,是一种直观的能够被电脑识别的数据序列化格式。
yaml 文件容易被人类阅读,容易和脚本语言交互的,可以被支持 yaml 库的不同的编程语言程序导入,比如: C,Python,Java 等。
yaml 文件是以数据为核心的,比传统的 xml 方式更加简洁。
yaml 文件的扩展名可以使用 .yml 或者 .yaml。
语法要求严格:
1、空格不能省略;
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的;
3、属性和值的大小写都是十分敏感的。
【语法】
key: value
【示例】
# 基础类型赋值 String,int,boolean,Date...
name: 张三
age: 23
happy: true
birthday: 2021/7/24
【注意】
【语法】
key:
value1: ××
value2: ××
...
【示例】
# 写法1
object_map_1:
name: 张三
age: 23
# 写法2
object_map_2: {name: 张三, age: 20}
【语法】
key:
- value1
- value2
...
【示例】
# Array、List、Set 中存放基本类型
# 写法1
array_list_set_1:
- 张三
- 李四
# 写法2
array_list_set_2:
- 张三
- 李四
# Array、List、Set 中存放对象类型
array_list_set_3:
- student1:
name: 张三
age: 23
- student2:
name: 李四
age: 24
【说明】- 表示 Array、List、Set 中的一个元素。
【示例】
key1: value1_${random.uuid} # 随机 uuid
key2: value2_${random.int} # 随机 int
key3: value3_${person.key3:other} # key3 存在取 key3 的值,不存在值为:other
【语法】
stringKey1: value1
string-key2: value2
【说明】string-key2 等于 stringKey2,相当于驼峰命名。
yaml 文件强大的地方在于可以给实体类直接注入匹配值。
无需引入其它坐标,默认项即可。略...
public class Student {
private String name;
private Integer age;
// 有参无参构造方法,get|set|toString方法
}
/*
@ConfigurationProperties 作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉 Spring Boot 将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = "person":将配置文件中的 person 下面的所有属性一一对应
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
// 基本类型
private String name;
private Integer age;
private Boolean happy;
private Date birthday;
// Object、Map 类型
private Student student;
private Map<String, Object> map;
// Array、Set、List 类型存放基本数据类型
private String[] array;
private Set<Object> set;
private List<Object> list;
// Array、Set、List 类型存放对象数据类型
private List<Student> array_set_list;
// 占位符
private List<Object> placeholder;
// 松散绑定
private String humpNamed1;
private String humpNamed2;
}
此时 Person 类有爆红提示。
【注意】点击打开文档后,该地址中的 Spring Boot 版本可能会找不到页面,切换一个版本即可。
【示例】将 2.5.3 改为 2.2.3.RELEASE https://docs.spring.io/spring-boot/docs/2.5.3/reference/html/appendix-configuration-metadata.html#configuration-metadata-annotation-processor
查看文档,找到一个依赖,在 pom.xml 中引入依赖之后,Person 类中不再爆红提示,点击 Hide notification 隐藏通知,需重启 IDEA 配置注解处理器即可生效。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
将 src/main/resources 目录下 application.properties 文件删除,新建 application.yml 文件。
Person:
# 基本数据类型
name: 刘一
age: 21
happy: false
birthday: 2021/7/24
# Object、Map 类型
student:
name: 陈二
age: 22
map:
key1: 张三
key2:
name: 李四
age: 24
# Array、Set、List 类型存放基本数据类型
array:
- 王五
- 25
set:
- 赵六
- 26
list:
- 孙七
- 27
# Array、Set、List 类型存放对象数据类型
array_set_list:
- name: 周八
age: 28
- name: 吴九
age: 29
# 占位符
placeholder:
- 占位符_${random.uuid} # 随机 uuid
- ${random.int} # 随机 int
- 北涯_${Person.name:other} # name 存在取 name 值,name 不存在取值:other
- 北涯_${Person.name2:other} # name2 存在取 name2 值,name2 不存在取值:other
# 松散绑定
humpNamed1: 驼峰命名1
hump-named2: 驼峰命名2
@SpringBootTest
class SpringbootYamlApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println("person = " + person.toString());
}
}
【运行】
person = Person(name=刘一,
age=21,
happy=false,
birthday=Sat Jul 24 00:00:00 CST 2021,
student=Student(name=陈二, age=22),
map={key1=张三, key2={name=李四, age=24}},
array=[王五, 25],
set=[赵六, 26],
list=[孙七, 27],
placeholder=[占位符_d95cca6a-ddad-4942-93ad-a7a75ce1f922, -19950, 北涯_刘一, 北涯_other],
humpNamed1=驼峰命名1,
humpNamed2=驼峰命名2)
原文:https://www.cnblogs.com/bybeiya/p/15056919.html