一、前言
前面我们讲解了SpringBoot到底是什么?如何理解parent、starter、引导类以及内嵌Tomcat?我们可以了解parent、starter、引导类、以及内嵌Tomcat相关的知识!今天让我们来看看SpringBoot基础配置。
二、问题引入
我们发现SpringBoot几乎不用做任何的配置,功能就有了,确实很好用。但是仔细想想,没有做配置意味着什么?意味着配置已经做好了,不用你自己写了。但是新的问题又来了,如果不想用已经写好的默认配置,该如何干预呢?这就是这一篇博客咱们要研究的问题。
三、属性配置
当我们创建一个新的springboot工程,在resources资源目录下,就会自动创建一个application.properties文件,结构如下图所示,所以就先从它开始吧!
从最简单的开始吧!大家都知道,我们使用的Tomcat服务器,它的默认端口是8080,我现在想修改为80端口,方便后续的测试更加的简便。该如何修改呢?
答案其实很简单,进入application.properties文件,输入port关键字,可以发现IDEA开发工具会自动给我关于端口修改的提示,enter选择就可以了。
文件代码如下:
server.port=80
运行一下看看结果,如下图所示,结果是80端口,完全正确
做完了端口的配置,趁热打铁,再做几个配置,目前项目启动时会显示一些日志信息,就来改一改这里面的一些设置。
关闭运行日志图表(banner)
spring.main.banner-mode=off
设置运行日志的显示级别
logging.level.root=info
我们现在配置了3个信息,但是又有新的问题了。这个配置是随便写的吗?什么都能配?有没有一个东西显示所有能配置的项呢?此外这个配置和什么东西有关呢?会不会因为我写了什么东西以后才可以写什么配置呢?比如我现在没有写数据库相关的东西,能否配置数据呢?
打开SpringBoot的官网,找到SpringBoot官方文档,打开查看附录中的Application Properties就可以获取到对应的配置项了,网址奉上:Common Application Properties
能写什么的问题解决了,再来说第二个问题,这个配置项和什么有关。在pom中注释掉导入的spring-boot-starter-web,然后刷新工程,你会发现配置的提示消失了。原来是设定使用了什么技术才能做什么配置。
温馨提示
所有的starter中都会依赖下面这个starter,叫做spring-boot-starter。这个starter是所有的SpringBoot的starter的基础依赖,里面定义了SpringBoot相关的基础配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.4</version> <scope>compile</scope> </dependency>
四、配置文件分类
SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件。分别如下:
properties格式
yml格式
yaml格式
就拿修改端口号为例,看看三种配置文件的特点:
application.properties(properties格式)
server.port=80
application.yml(yml格式)
server: port: 81
application.yaml(yaml格式)
server: port: 82
仔细看会发现yml格式和yaml格式除了文件名后缀不一样,格式完全一样。yml和yaml文件格式是一模一样的,只是文件后缀不同,所以可以合并成一种格式来看。那对于这三种格式来说,以后用哪一种比较多呢?以后基本上都是用yml格式的,以后在企业开发过程中用这个格式的机会也最多,一定要重点掌握。
五、配置文件优先级
现在我们已经知道使用三种格式都可以做配置了,好奇友友们就会问了,万一我三个都写了,他们三个谁说了算呢?
其实三个文件如果共存的话,谁生效说的就是配置文件加载的优先级别。我们就让三个配置文件书写同样的信息,比如都配置端口,然后我们让每个文件配置的端口号都不一样,最后启动程序后看启动端口是多少就知道谁的加载优先级比较高了。
application.properties(properties格式)
server.port=80
application.yml(yml格式)
server: port: 81
application.yaml(yaml格式)
server: port: 82
启动后发现目前的启动端口为80,把80对应的文件删除掉,然后再启动,现在端口又改成了81。现在我们就已经知道了3个文件的加载优先顺序是什么
application.properties > application.yml > application.yaml
虽然得到了一个知识结论,但是我们实际开发的时候还是要看最终的效果为准。也就是你要的最终效果是什么自己是明确的,上述结论只能帮助你分析结论产生的原因。这个知识了解一下就行了,因为以后同时写多种配置文件格式的情况实在是较少。
最后我们把配置文件内容给修改一下
application.properties(properties格式) server.port=80 spring.main.banner-mode=off
application.yml(yml格式)
server: port: 81 logging: level: root: debug
application.yaml(yaml格式)
server: port: 82
我们发现不仅端口生效了,最终显示80,同时其他两条配置也生效了,看来每个配置文件中的项都会生效,只不过如果多个配置文件中有相同类型的配置会优先级高的文件覆盖优先级的文件中的配置。如果配置项不同的话,那所有的配置项都会生效。
总结
配置文件间的加载优先级 properties(最高)> yml > yaml(最低)
不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留