Spring Boot 使用一个全局的配置文件,配置文件名称是固定的: application*.yml|yaml|properties
。html
Spring Boot 是基于约定的,因此不少配置都有默认值,配置文件的做用就是修改 Spring Boot 自动配置的默认值。java
若想使用自定义的配置替换默认配置,能够编写 application.properties 或 application.yml(application.yaml)配置文件进行配置。spring
yaml 文件格式是 YAML Aint Markup Language 编写的,是一种直观的可以被电脑识别的数据序列化格式。编程
yaml 文件容易被人类阅读,容易和脚本语言交互的,能够被支持 yaml 库的不一样的编程语言程序导入,好比: C,Python,Java 等。bash
yaml 文件是以数据为核心的,比传统的 xml 方式更加简洁。app
yaml 文件的扩展名可使用 .yml 或者 .yaml。dom
语法要求严格:编程语言
一、空格不能省略;ide
二、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的;spring-boot
三、属性和值的大小写都是十分敏感的。
【语法】
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,至关于驼峰命名
新建一个 Spring Boot 项目,建立 Student、Person 两个实体类
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; }
【注意】点击打开文档后,该地址中的 Spring Boot 版本可能会找不到页面,切换一个版本便可。2.5.3 改成 2.2.3.RELEASE
查看文档,找到一个依赖,在 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)