SpringBoot配置⽂件
SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如:
•
项⽬的启动端⼝
•
数据库的连接信息(包含⽤⼾名和密码的设置)
•
第三⽅系统的调⽤密钥等信息
•
⽤于发现和定位问题的普通⽇志和异常⽇志等
Spring Boot 配置⽂件有以下三种:
•
application.properties
properties 配置⽂件是最早期的配置⽂件格式,也是创建 SpringBoot 项⽬默认的配置⽂件
•
application.yml
•
application.yam
特殊说明
1.
理论上讲
.properties
和
.yml
可以并存在于⼀个项⽬中,当
.properties
和
.yml
并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以
.properties
为主, 也就是
.properties
优先级更⾼.
2.
虽然理论上来讲
.properties
可以和
.yml
共存,但实际的业务当中,我们通常会采取⼀种
统⼀的配置⽂件格式,这样可以更好的维护
读取配置⽂件
如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤
@Value
注解来实现。
@Value
注解使⽤"
${}
"的格式读取
properties 缺点分析
properties 配置是以 key-value 的形式配置的,如下图所⽰
从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息
yml 配置⽂件说明
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔.
我们先来学习yml的语法
yml 基本语法
yml 是树形结构的配置⽂件,它的基础语法是"key: value".
key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,
空格不可省略
基础语法如下:
![](https://i-blog.csdnimg.cn/direct/c3e6ceda4f184a1bb3f38154d800242a.png)
yml 使⽤进阶
yml 配置不同数据类型及 null
![](https://i-blog.csdnimg.cn/direct/8944672be7c04b7abc67e3d601db38f8.png)
yml 配置读取
yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,实现代码如下:
yml配置:
![](https://i-blog.csdnimg.cn/direct/4304cf5ef24f456bbe08065bb25297b2.png)
![](https://i-blog.csdnimg.cn/direct/1b002c30366640c9b56bfd8be5e5963b.png)
注意事项:value 值加单双引号
字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
尝试在 application.yml 中配置如下信息
![](https://i-blog.csdnimg.cn/direct/90f9609c4166442abe33861408c668f3.png)
![](https://i-blog.csdnimg.cn/direct/6236fe3ac5a14a9aa66b3082eb0fea42.png)
![](https://i-blog.csdnimg.cn/direct/554fca7be42043b0b1db9fb4e2ac5adf.png)
从上述结果可以看出:
•
字符串默认不⽤加上单引号或者双引号。
•
单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
•
双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义.
此处的转义理解起来会有些拗⼝, \n 本意表⽰的是换⾏
使⽤单引号会转义, 就是说, \n 不再表⽰换⾏了, ⽽是表⽰⼀个普通的字符串
使⽤双引号不会转义, 表⽰ \n 表⽰的是它本⾝的含义, 就是换⾏
配置对象
我们还可以在 yml 中配置对象,如下配置:
![](https://i-blog.csdnimg.cn/direct/693f442ef6fc44789d3c49cc797ac3e8.png)
这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解
@ConfigurationProperties
来读取,具体实现如下:
![](https://i-blog.csdnimg.cn/direct/09d7359ca8334cd3ba67ae7972e8ce48.png)
![](https://i-blog.csdnimg.cn/direct/1d6f474662204e298905f31d17842778.png)
![](https://i-blog.csdnimg.cn/direct/c6f4222fbb064eb08b817acde2950396.png)
配置集合
配置⽂件也可以配置 list 集合,如下所⽰:
![](https://i-blog.csdnimg.cn/direct/ee2c14e93df04f11a4c3caa05678c185.png)
![](https://i-blog.csdnimg.cn/direct/30bcf04d3c4a4991a9d2857dd533750b.png)
集合的读取和对象⼀样,也是使⽤
@ConfigurationProperties
来读取的,具体实现如下:
![](https://i-blog.csdnimg.cn/direct/044ab60b0ee045939d3047bea199e30b.png)
![](https://i-blog.csdnimg.cn/direct/d6cb3ab77e5e4300887fa3602d9e4bdc.png)
配置Map
配置⽂件也可以配置 map,如下所⽰
![](https://i-blog.csdnimg.cn/direct/fe98f80b4953417d887514d496c5fdc9.png)
Map的读取和对象⼀样,也是使⽤
@ConfigurationProperties
来读取的,具体实现如下
![](https://i-blog.csdnimg.cn/direct/e4dc11190e164820ae40be74c2905854.png)
打印类的实现如下:
![](https://i-blog.csdnimg.cn/direct/42f4469034904a059ecac571613be52b.png)
![](https://i-blog.csdnimg.cn/direct/88dc8dd6c75d460eb9ca8d1ee7a59ab4.png)
yml优缺点
优点:
1.
可读性⾼,写法简单, 易于理解
2.
⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
3.
⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
缺点:
1.
不适合写复杂的配置⽂件
2.
对格式有较强的要求