哈喽呀,你好呀,欢迎呀,快来看一下这篇宝藏博客吧~~~
1. 配置文件的作用
对于Spring Boot项目而言,所有重要的数据都是在配置文件中配置的,比如:
- 项目的启动端口;
- 数据库的连接信息(包含用户名和密码的设置);
- 用于发现和定位问题的普通日志和异常日志等;
- 第三方系统的调用秘钥等.
如果没有配置文件,那么SpringBoot项目就不能连接和操作数据库,也不能保存可以用于排查问题的关键日志,可见其配置文件的重要性.
那配置文件到底究竟是什么样的呢,哦们一起来看.
2.配置文件的格式
Spring Boot 配置文件主要分为以下两种:
- .properties
- .yml
对应到项目的目录里面就是;
要注意的是,application.properties是项目中自带默认的(下面那个application.yml是我自己建的), 并且他的优先级是最高的,比如你在这两个文件中都对端口号做了不一样的设置,则该项目会优先选择在application.properties中的配置的端口号.也就是说,.properties 配置⽂件的优先级最⾼,但加载完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息。
虽然理论上来讲,.properties和.yml可以共存,但在实际的业务中,通常会采取一种统一的配置文件格式,这样可以降低故障率.图中application.properties这个配置文件是IDEA帮忙生成的,那在实际的开发中我们如果需要自己创建配置文件又该怎样创建呢?
我们都说SpringBoot一大特点就是约定大于配置.所以我们要按照它的规定来,当我们想要去创建配置文件时,应遵循以下命名规则:
application-xxx.properties 或 application-xxx.yml
说明:前面的"application-"是必须要这样写的,"xxx"可以任意写,但最好符合规范,最后是写.properties还是.yml取决于你或项目团队想要选用哪种格式的配置文件.你只有按照它的这个规则来才能被Spring扫描到.比如下图就是一个合格的自定义的配置文件:
那有人就要问了,为什么要创建这么多配置文件呢,维护起来不是更麻烦吗?要知道,一个项目工程的完成往往需要多个配置文件.因为往往在一个项目中,它的开发平台是有多个的,如果只用一个配置文件的话,在不同的平台时,我们就需要改成当前平台所适应的,每次都改来改去会很麻烦,而且还会增加出错率,比如,在不同的平台上,端口号,连接的数据库等都可能不同,如果不建立多个而是采用在一个配置文件中进行修改的话,那头真是太铁了~。所以我们就采用多平台的配置文件设置.这样在不同的平台,我们就可以指定选择不同的配置文件,就不需要改来改去了,一般最少会有以下三个:
- 开发环境的配置文件
- 生产环境的配置文件
- 测试环境的配置文件
那创建了这么多配置文件,Spring怎么知道我要用哪个配置文件呢,这是就需要我们在主配置文件application.yml中告诉Spring我们要用哪一个了.比如我现在要用生产环境的配置文件,则只需要在主配置文件 application.yml 中写:
2.1 properties 配置文件的基本语法
properties 配置文件时最早期的配置文件格式,也是创建Spring Boot项目默认的配置文件.
.properties 配置文件是以键值的形式配置的,key和value之间是以"="连接的,如:
PS:配置文件中使用"#"来添加注释信息.
properties缺点分析:
从上述配置可以看出, .properties配置文件中会有很多冗余的信息,比如:
前面都是一样的,但是却要写三次,这显然不太友好.而.yml 类型的配置文件就可以解决这个问题:
2.3 yml 配置文件的基本语法
yml是树形结构的配置文件,它的基础语法是"key: value",注意key和value之间要使用英文冒号加空格,注意,空格千万不能省略.如:
还有一种配置方式,当我们要配置的信息有多级时,需采用以下格式:
我们再来回顾一下properties是如何配置的:
从中我们可以发现,用yml就可以省略相同的前缀.这也是yml的优点之一:写法简单简洁.
yml配置文件 优点:
yml 是一个可读性高,写法简单,易于理解,它的语法和JSON类似。
yml 支持更多的数据类型,它可以简单表达数组,散列表,标量等数据。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
yml 支持更多的编程语言,它不止在Java中可以使用,还可以在Golang、PHP、Python、Ruby、JavaScript、Perl中。
yml还可以配置不同的数据类型和null:
那配置好以上这些之后我们怎么用呢,接下来我们来看yml配置的读取吧~
2.4 读取配置文件信息
在项目中,如果需要主动读取配置文件中的某些内容,可以使用 @Value 注解来实现.
@Value 注解使用"${配置文件的键}"的格式读取,比如我现在要读取上述yml配置文件中string.value的值,代码如下(TestController):
运行结果:
很显然,我们成功的读取到了指定的yml配置文件中的信息.
要记住,读取配置文件时,不管配置文件是.properties型还是.yml型的,都是按照以上这种方法来读取的,即:
@Value("${要读取的配置信息的键}")
当传入一个没有被配置过键值对时,程序会报错.
2.5 配置对象
我们还可以在yml中配置对象,如下:
或者使用行内写法,(与上面的写法作用一致):
如果要读取这个对象的信息,就要用另外一个注解@ConfigurationProperties来读取了.具体实现如下:
调用类的实现如下:
运行结果如下:
显然,我们成功的用 @ConfigurationProperties 注解读取到了student对象。
好啦,今天就到这啦,回顾一下,你还记得配置文件的作用吗,还记得如何在配置文件中配置我们需要的信息以及如何读取吗~~~
咱们下期见吧~拜拜~~~