文章目录
配置文件
在SpringBoot中配置文件有两种,一种是application.properties
,另一种是application.yml
,配置文件名是固定的。其中yml
配置文件是在properties
之后才有的。配置文件放在src/main/resources
目录或者类路径/config
下,配置文件的作用,就是修改SpringBoot自动配置的默认值,SpringBoot底层都给我们自动配置好了很多默认值,我们就需要通过灵活的使用properties和yml
来进行修改默认配置。
我们通过Idea向导帮我们创建的新项目,在Resources目录下面会帮我们自动生成一个application.properties
配置文件,如下图
在resources目录下我们可以暂时手动再创建一个application.yml
文件,为了比较学习他们的区别(说明一下的就是,二者可以同时存在,不过最终只会运行一个,一般默认运行application.properties
,不过我们可以通过配置,在application.properties
中同时应用yml,达到多个配置文件的目的),依旧在resources
目录下,直接右键new->File,创建一个名为application.yml
的文件,如下图
YAML
是 “YAML Ain’t a Markup Language”
(YAML 不是一种标记语言)。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(是一种标记语言)。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件,即以数据为中心,比json、xml
等更加适合做配置文件,以前的项目大都是使用xml作为配置文件的。
在全局配置文件中,可以对一些默认配置值进行修改,比如我们修改默认的端口号,我们如果使用xml作为配置文件,配置端口可能会是如下:
<server>
<port>8081</port>
</server>
xml会浪费大量的内容给标签的开闭上,那如果我们在SpringBoot项目中使用properties和yml设置端口,又该如何呢,如下:
YAML语法
基本语法
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 大小写敏感
k:(空格)v
:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
数据类型
YAML 支持的三种数据结构:
- 对象:键值对的集合
- 数组:一组按次序排列的值
- 字面量:单个的、不可再分的值
YAML常用写法
字面量:普通的值(数字,字符串,布尔)
k: v
:字面直接来写;
-
字符串默认不用加上单引号或者双引号;
-
""
:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":
输出;zhangsan 换行 lisi
''
:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:
输出;zhangsan \n lisi
对象、Map(属性和值)(键值对)
- 对象的一组键值对,使用冒号分隔。如:username: admin
- 冒号后面跟空格来分开键值;
{k: v}
是行内写法(就是写在一行)
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {
lastName: zhangsan,age: 18}
数组(List、Set)
- 一组连词线(
-
)开头的行,构成一个数组,[]为行内写法 - 数组,对象可以组合使用
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
配置文件值注入案例
- 在
application.yml
中写入一些数据,就是写一个类的属性值以及对应的数值,如下
person:
lastNane: zhangsan
age: 18
boss: true
birthday: 2021/01/01
maps: {
k1: v1,k2: v2}
lists:
- lisi
- wangwu
- zhaoliu
dog:
name: xiaohei
age: 2
- 创建一个
Person
类和一个Dog
类,类中的属性值和配置文件中的属性值要一一对应,并在Person的类上加上@ConfigurationProperties
注解,注解中的前缀填写我们在配置文件中的person
,如下
/**
* Dog类
**/
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birthday;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
//以下是getter和setter、toString()方法,这里不在写出
//直接ALT+INS快捷键生成就好
/**
* Dog类
**/
public class Dog {
private String name;
private Integer age;
//以下是getter和setter、toString()方法,这里不在写出
@ConfigurationProperties
:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;prefix = "person"
:配置文件中哪个下面的所有属性进行一一映射- 只有这个组件是容器中的组件,才能容器提供的
@ConfigurationProperties
功能;@ConfigurationProperties(prefix = "person")
默认从全局配置文件中获取值;@Component
,把类组件加到容器中
- 要想使用
@ConfigurationProperties
这个注解,得要导入依赖:
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor