Springboot 配置文件加载顺序是怎么样的?

Sringboot 配置文件三连

Springboot 中我们通常用的配置文件有两种形式:yml和properties

那么当同时存在yml和properties文件时,加载顺序是怎么样的呢?

因此yml和properties加载顺序来说的话,是先读取的yml的配置再读取properties的配置。

如果yml和properties里面配置了相同的属性的话,那么使用的是哪一个文件的配置呢?

我们搭建一个Springboot应用,然后同时配置上application.yml和application.properties两个文件

#application.yml配置
server:
  port: 7070
#application.properties配置
  server.port=9090

启动后发现端口是9090这个端口,那么此时使用的是properties文件的配置,这时候我有下面两种猜想:
一、启动时先读到了7070,再读到9090这个端口,然后决定使用后者(后面读的配置优先级高)。
二、启动时先读到了9090,然后就启用,后面读到相同属性的配置不进行更改。

根据网上搜索的结果:是第一种情况,后面读取的配置优先级会更高,所以最终使用的是properties文件里面的属性。因此yml和properties加载顺序来说的话,是先读取的yml的配置再读取properties的配置。

(待补充源码跟踪……)
在这里插入图片描述

拓展一下
当application.properties和application-dev.properties有相同配置时

#application.properties配置
  server.port=9090
  spring.profiles.active=dev
#application-dev.properties配置
  server.port=8081

此时启动tomcat的时候端口是8081(也就是使用了dev的配置)

Springboot官方给出的文档如下:

1、开发者工具 Devtools 全局配置参数;
2、单元测试上的 @TestPropertySource 注解指定的参数;
3、单元测试上的 @SpringBootTest 注解指定的参数;
4、命令行指定的参数,如 java -jar springboot.jar --name="Java技术栈";
5、命令行中的 SPRING_APPLICATION_JSONJSON 指定参数, 如 java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar
6、ServletConfig 初始化参数;
7、ServletContext 初始化参数;
8、JNDI参数(如 java:comp/env/spring.application.json);
9、Java系统参数(来源:System.getProperties());
10、操作系统环境变量参数;
11、RandomValuePropertySource 随机数,仅匹配:ramdom.*;
12、JAR包外面的配置文件参数(application-{profile}.properties(YAML))
13、JAR包里面的配置文件参数(application-{profile}.properties(YAML))
14、JAR包外面的配置文件参数(application.properties(YAML))
15、JAR包里面的配置文件参数(application.properties(YAML))
16、@Configuration配置文件上 @PropertySource 注解加载的参数;
17、默认参数(通过 SpringApplication.setDefaultProperties 指定);

作者:niaonao
链接:https://juejin.im/post/5d22e80a6fb9a07ec63b3839
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其中第四条:当我们使用 java -jar bootdemo-0.0.1-SNAPSHOT.jar --server.port=6060的时候,启动的端口号就是我们启动参数指定的6060

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值