一、配置文件概述
配置文件的作用
整个项目中所有重要的数据都是在配置文件中配置的。
比如:
1、数据库的连接信息(包含用户名和密码的设置)
2、项目的启动端口
3、第三方系统的调用密钥等信息
4、用于发现和定位问题的普通日志 和 异常日志 等。
5、还可以配置 日志的级别(规定只显示达到某个级别的日志),以及日志的持久化存储。
想象一下:
如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的
配置文件还有一个优点:
配置文件可以设置 开发环境 和 测试境,两个配置文件。
然后呢,在运行打包的时候,通过修改一个变量,就可以指定 当前项目 “走”哪一个配置文件。
所以,配置文件之间是可以并存的!
意思就是:
可以将两个,或两个以上的配置文件(开发的,测试的,运维的),项目上线的时候,我们只需要改一个参数,改一个名字。
然后,项目中所有的内容,全部都会走 另一个配置文件。非常方便!
到时候,会给你们演示一下。
另外,再补充一点。
配置文件的分类,里面的内容可以分为两个类:
- 1、系统级别的
- 2、自定义级别的
配置文件的格式
Spring Boot 配置⽂件主要分为以下两种格式:
1、.properties
2、.yml
【文件的后缀代表着文件的格式;配置文件也是如此!!!】
至于为什么要有两种格式?
这两者之间的关系,就像前面讲Bean 作用域 和 生命周期中的 @PostConstruct 与 init- method 之间的关系一样。
两者的功能是一样的,但是!是来自于 两个不同时间段 的 产物。
最早出现的配合文件格式是 .properties。
然后,在后期的使用中发现: properties 存在着一些缺陷。
那么,自然就会产生一个想法:properties 该怎么去优化?
于是,.yml 格式的配置文件,就诞生了。
这就和 maven 和 gradle 之间的关系一样。
gradle 是 maven 的升级版。
我们的 .yml格式的配置文件,就是 .properties格式配置文件 的 升级版。
前面讲过:一个项目中,可以存在多个配置文件。
即:配置文件之间是可以共存的!
也就是说:我们可以直接在项目中传建其他的配置文件,格式可以不同
二、application.properties 配置文件
基本语法
而且!
在填写完后面的 value 值 之后,也不能加上一个空格。
会出事!!!
比如:
设置端口号:
另外,我们还可以自定义键值对。【上面的是系统级别的配置】
因为我们已经把项目的端口号改成了9090,所有你再启动项目的时候端口号就变了
更多配置文件详见:官方文档
读取配置文件
到了 Spring Boot 时代,几乎所有的功能,都可以通过 注解来搞定。
读取配置文件也是一样的,
可以使⽤ @Value 注解来实现。
@Value 注解使⽤“${}”的格式读取.
在配置文件中用户可自定义各自类型的数据
三、application.yml 配置文件
yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。
yml 是⼀个可读性⾼,易于理解,⽤来表达数据序列化的格式。它的语法和其他⾼级语⾔类似(与 json 格式类似,键值对之间使用冒号+空格,进行分隔),并且可以简单表达清单(数组)、散列表,对象,标量,布尔,int等数据形态,甚至连 null 都可以设置!!!
它使⽤空⽩符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
yml 最⼤的优势是可以跨语⾔,不⽌是 Java 中可以使⽤。
golang、python 都可以使⽤ yml 作为配置⽂件。
总结下来, yml 配置文件一共有三个优点:
1、写法简单
2、支持多种数据类型
3、支持跨语言
上述这三个优点,都是 properties 配置文件所不具备的。
基本语法
yml 是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒号加空格的⽅式组成的,其中的空格不可省略。
上面我们说了一个项目中,可以存在多个配置文件。
那么我们可以直接在项目中传建其他的配置文件,格式可以不同
当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properties 为主(忽略 yml 中的配置)。
如下图所示:
但其实与上面的application.properties相比,.yml配置文件还是挺好用的。