SpringBoot--yml/yaml配置文件
前言
SpringBoot除了properties
配置文件,还可以使用yaml
配置文件,更为直观。
简介
YAML是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
非常适合用来做以数据为中心的配置文件
用法
基本语法
key: value
;kv之间有空格- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
#
:表示注释- 字符串无需加引号,如果要加,
''
与""
表示字符串内容 会被 转义/不转义
数据类型
-
字面量:单个的、不可再分的值。
date、boolean、string、number、null
1
key: value
-
对象:键值对的集合。
map、hash、set、object
1
2
3
4
5
6
7
8# 写法一(行内写法)
key: [key1: value1, key2: value2, key3: value3]
# 写法二
key:
key1: value1
key2: value2
key3: value3 -
数组:一组按次序排列的值。
array、list、queue
1
2
3
4
5
6
7
8# 写法一(行内写法)
key: [value1, value2, value3]
# 写法二
key:
- value1
- value2
- value3
示例
新建一个SpringBoot项目
在pom.xml配置文件中引入Lombok依赖。
在src/main/java/boot
目录下新建bean
文件夹,并编写Pet和Person类:
Pet类
:
1 | import lombok.Data; |
Person类
:
1 | import lombok.Data; |
@ConfigurationProperties(prefix = "person")
:标识配置文件中的类
在src/main/resources
目录下新建application.yaml
配置文件(以配置Person类为例):
1 | person: |
需要注意
pet
和allPets
属性的写法
测试,在src/main/java/boot
目录下新建controller
文件夹,并编写HelloController
类:
1 | import boot.bean.Person; |
启动服务,浏览器访问:http://localhost:8080/person
注意
字符串的引号包裹问题
关于字符串被''
以及""
包裹的问题:
单引号,转义
1 | person: |
双引号,不转义
1 | person: |
如何理解转义与不转义:
原本
\n
即表示换行。单引号包裹后会将其转义,即令换行失效;双引号包裹不转义,即保留原本的换行效果。
properties与yaml、yml的优先级
当同时编写properties
、yaml
、yml
配置文件,且其中内容有冲突时,加载顺序为:
yml > yaml > properties
由于后加载的会覆盖先加载的内容,所以在展示效果上来看,顺序为:
properties > yaml > yml
示例,在application.properties
以及application.yaml
配置文件中同时配置userName:
application.properties
:
1 | lisi = |
application.yaml
:
1 | person: |
运行,效果如下:
补充
yaml配置文件的语法提示问题
在编写yaml配置文件时并不会有自动语法提示:
需要在pom.xml
配置文件中引入如下依赖:
1 | <dependency> |
说明:
1
2
3
4
5 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>表示语法提示
1
2
3
4
5
6
7
8 <configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>表示在打包时不添加语法提示的依赖
效果:
说明:
person.user-name
:-n
即表示大写N
后记
使用yml/yaml配置文件更便于直观展示与理解。