作者简介:大家好,我是未央;
博客首页:未央.303
系列专栏:JavaEE进阶
每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!
前言
本节课我们将开始进入到springboot的学习当中;主要介绍springboot的配置文件;主要有application.properties 配置文件 和 application.yml 配置文件两种;
一、配置文件概述
1.1 配置文件的作用
整个项目中所有重要的数据都是在配置文件中配置的;
比如:
1、数据库的连接信息(包含用户名和密码的设置)
2、项目的启动端口
3、第三方系统的调用密钥等信息
4、用于发现和定位问题的普通日志 和 异常日志 等。
5、还可以配置 日志的级别(规定只显示达到某个级别的日志),以及日志的持久化存储。
想象一下:
如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的;
配置文件还有一个优点:
配置文件可以设置 开发环境 和 测试环境,两个配置文件。
然后呢,在运行打包的时候,通过修改一个变量,就可以指定 当前项目 “走”哪一个配置文件。
所以,配置文件之间是可以并存的!
意思就是:
可以将两个,或两个以上的配置文件(开发的,测试的,运维的),项目上线的时候,我们只需要改一个参数,改一个名字。然后,项目中所有的内容,全部都会走 另一个配置文件。非常方便!
补充:
配置文件的分类,里面的内容可以分为两个类:
- 1、系统级别的
- 2、自定义级别的
1.2 配置文件的格式
Spring Boot 配置文件主要分为以下两种格式:
- 1、.properties
- 2、.yml
【文件的后缀代表着文件的格式;配置文件也是如此!!!】
至于为什么要有两种格式?
这两者之间的关系,就像前面讲Bean 作用域 和 生命周期中的 @PostConstruct 与 init- method 之间的关系一样。
两者的功能是一样的,但是!是来自于 两个不同时间段 的 产物。最早出现的配合文件格式是 .properties。
然后,在后期的使用中发现: properties 存在着一些缺陷。
那么,自然就会产生一个想法:properties 该怎么去优化?
于是,.yml 格式的配置文件,就诞生了。
这就和 maven 和 gradle 之间的关系一样。
gradle 是 maven 的升级版。
我们的 .yml格式的配置文件,就是 .properties格式配置文件 的 升级版。
注意:
前面讲过:一个项目中,可以存在多个配置文件。
即:配置文件之间是可以共存的!也就是说:我们可以直接在项目中传建其他的配置文件,格式可以不同
二、application.properties 配置文件
2.1 基本语法
语法格式:
而且注意:
在填写完后面的 value 值 之后,也不能加上一个空格。 会出事!!!
后果:
设置端口号:
另外,我们还可以自定义键值对。【上面的是系统级别的配置】
因为我们已经把项目的端口号改成了9090,所有你再启动项目的时候端口号就变了
2.2 读取配置文件
到了 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 配置文件所不具备的。
3.1 基本语法
yml 是树形结构的配置⽂件,它的基础语法是“key: value”,
注意: key 和 value 之间使⽤英文冒号加空格的方式组成的,其中的空格不可省略。
上面我们说了一个项目中,可以存在多个配置文件。
那么我们可以直接在项目中创建其他的配置文件,格式可以不同;
当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properties 为主(忽略 yml 中的配置)。
但其实与上面的application.properties相比,.yml配置文件还是挺好用的。
3.2 读取yml中的配置
1、yml配置的简单读取
这个和对properitices的读取是相同;
2、读取yml 配置中不同数据类型及 null
3.读取yml配置文件的补充\
先来看一个例子:
yml字符串修饰符的问题:
3.3 yml配置对象
我们可以在 yml 中配置对象,如下配置:
那么怎么读取我们yml中的配置文件呢?
可能你会说:还用@Value("${mykey.key}")不行吗?
答案是不行,我们要用的专门的类做这一件事:
3.4 yml配置集合
首先我们在yml配置文件里把集合配置上:
那么接下来我们看看是怎么读取集合的 :
集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,创建一个类并在该类中设置一个集合属性,具体实现如下:
四、Properties VS yml 总结和补充
1、properties 是以 key=value 的形式配置的键值类型的配置⽂件;
yml 使用的是类似 json 格式的树形配置⽅式进⾏配置的.
key 和 value 之间使⽤“: ”(英⽂)冒号加空格的⽅式设置,并且空格不可省略;
yml 层级之间使用换行缩进的方式配置。
2.properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据;
使⽤ yml 可以很好的解决数据冗余的问题。
3.yml 通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置文件作为 Java 和 Go 的共同配置文件。
4、yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件。
当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properties 为主(忽略 yml 中的配置)。
4.1 关于properites的乱码问题
原因:
这是因为 application.properties 是属于早期的配置文件,而早期的 配置文件是不支持中文的。
而 yml 是天生就支持中文的(utf8)。
要想 application.properties 支持中文,需要进行配置。
配置方法:
总结
今天的内容就介绍到这里,我们下一期内容再见!!!!!!!