SpringBoot配置文件是什么?该如何使用?(一)

简介: SpringBoot配置文件是什么?该如何使用?(一)

一、前言

前面我们讲解了SpringBoot到底是什么?如何理解parent、starter、引导类以及内嵌Tomcat?我们可以了解parent、starter、引导类、以及内嵌Tomcat相关的知识!今天让我们来看看SpringBoot基础配置。


二、问题引入

我们发现SpringBoot几乎不用做任何的配置,功能就有了,确实很好用。但是仔细想想,没有做配置意味着什么?意味着配置已经做好了,不用你自己写了。但是新的问题又来了,如果不想用已经写好的默认配置,该如何干预呢?这就是这一篇博客咱们要研究的问题。


三、属性配置

当我们创建一个新的springboot工程,在resources资源目录下,就会自动创建一个application.properties文件,结构如下图所示,所以就先从它开始吧!

image.png

从最简单的开始吧!大家都知道,我们使用的Tomcat服务器,它的默认端口是8080,我现在想修改为80端口,方便后续的测试更加的简便。该如何修改呢?


答案其实很简单,进入application.properties文件,输入port关键字,可以发现IDEA开发工具会自动给我关于端口修改的提示,enter选择就可以了。

image.png

文件代码如下:


server.port=80


运行一下看看结果,如下图所示,结果是80端口,完全正确

image.png

做完了端口的配置,趁热打铁,再做几个配置,目前项目启动时会显示一些日志信息,就来改一改这里面的一些设置。


关闭运行日志图表(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(最低)

不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留


相关文章
|
运维 Java 程序员
SpringBoot配置文件优先级
其实上述4种文件是提供给你了4种配置文件书写的位置,功能都是一样的,都是做配置的。总体上来说,4种配置文件如果都存在的话,有一个优先级的问题,说白了就是加入4个文件我都有,里面都有一样的配置,谁生效的问题。两个配置文件共存,因为config目录中的配置加载优先级比你的高,所以配置项如果和级别4里面的内容相同就覆盖了,这样是不是很简单?场景A:你作为一个开发者,你做程序的时候为了方便自己写代码,配置的数据库肯定是连接你自己本机的,咱们使用4这个级别,也就是之前一直用的application.yml。...
243 0
|
Java Nacos Spring
《SpringBoot系列二》:配置文件加载优先级(含服务注册中心nacos)
《SpringBoot系列二》:配置文件加载优先级(含服务注册中心nacos)
1528 0
《SpringBoot系列二》:配置文件加载优先级(含服务注册中心nacos)
|
JSON Java 数据格式
【SpringBoot】配置文件的加载与属性值的绑定
【SpringBoot】配置文件的加载与属性值的绑定
【SpringBoot】配置文件的加载与属性值的绑定
|
Java 测试技术 Spring
SpringBoot是怎么实现在配置文件的随机数的?
随机数的使用你是不是经常用到?我们在进行运行`SpringBoot`单元测试时一般不会指定应用程序启动时的`端口号`,可以在`application.properties`文件内配置`server.port`的值为`${random.int(10000)}`,代表了随机使用`0~10000`的端口号。
|
监控 安全 Java
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
335 0
《SpringBoot启动流程三》:两万+字图文带你debug源码分析SpringApplication准备阶段(含配置文件加载时机、日志系统初始化时机)
|
Java Spring
《SpringBoot系列四》:@Value注解从配置文件中读取数组/集合(@Value设置默认值)
《SpringBoot系列四》:@Value注解从配置文件中读取数组/集合(@Value设置默认值)
2678 0
《SpringBoot系列四》:@Value注解从配置文件中读取数组/集合(@Value设置默认值)
|
JSON 前端开发 Java
《SpringBoot系列一》:yaml配置文件各种数据类型使用姿势(含@EnableConfigurationProperties、@ConfigurationProperties)
《SpringBoot系列一》:yaml配置文件各种数据类型使用姿势(含@EnableConfigurationProperties、@ConfigurationProperties)
1367 0
《SpringBoot系列一》:yaml配置文件各种数据类型使用姿势(含@EnableConfigurationProperties、@ConfigurationProperties)
|
Java 测试技术 数据库连接
springboot原理实战(6)--配置文件注入集合,动态注入,切换profile环境
springboot原理实战(6)--配置文件注入集合,动态注入,切换profile环境
371 0
springboot原理实战(6)--配置文件注入集合,动态注入,切换profile环境
|
Java 关系型数据库 MySQL
springboot原理实战(5)-配置文件操作
springboot原理实战(5)-配置文件操作
237 0
springboot原理实战(5)-配置文件操作
|
XML Java 应用服务中间件
SpringBoot项目知识点,配置文件
SpringBoot项目知识点,配置文件
121 0
SpringBoot项目知识点,配置文件