SpringBoot项目是一个标准的Maven项目,它的配置文件需要放在src/main/resources/下,其文件名必须为application,其存在两种文件形式,分别是properties和yaml(或者yml)文件
一般情况下,springboot默认会在resource目录下生成一个配置文件(application.properties或application.yaml),但其实springboot允许配置多个配置文件(application.properties或application.yaml),但是这并不意味着这些配置文件一定会替换默认生成的配置文件,它们是互补的存在。如果在某些场景下需要把配置文件单独拿出来并且启动的时候加载进去,那么外部的配置文件将是一个很好的选择。
配置文件加载顺序
需要注意的是配置文件加载顺序加载顺序在springboot 2.4.0前后是不一样的。
springboot 2.4.0及其之前版本的配置文件加载顺序
file:./config/
file:./config/*/
file:./
classpath:config/
classpath:
springboot 2.4.0之后版本的配置文件加载顺序
file:./config/*/
file:./config/
file:./
classpath:config/
classpath:
区别在于springboot 2.4.0之后的版本将file:./config/*/的在顺序调整为第一加载顺序。
file是指当前jar包所在路径。
classpath是指springboot resource文件夹下路径。
验证
前期准备
新建一个springboot项目
启动类如下:
@SpringBootApplication
public class MqApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String property = environment.getProperty("spring.application.name");
System.out.println("current spring.application.name="+property);
}
}
配置文件:
spring.application.name=classpath
server.port=8080
为了验证 springboot 2.4.0之前和之后的版本加载顺序的不一样,会使用两个版本对比。
对比版本:springboot 2.4.3 和 springboot 2.3.5.RELEASE
下面是不同路径下配置不同端口和应用名以便验证。
路径 | 端口号 | application.name |
---|---|---|
file:./config/*/ | 8084 | file:./config/*/ |
file:./config/ | 8083 | file:./config/ |
file:./ | 8082 | file:./ |
classpath:config/ | 8081 | classpath:config/ |
classpath: | 8080 | classpath: |
验证配置文件加载顺序
根据上述表格,将配置文件分别复制到不同的路径下创建配置文件并按表格修改spring.application.name和server.port属性值。
启动项目,下面是两个版本的启动信息:
从两张图中可以得出结论:
- springboot 2.4.0前后配置文件加载顺序不一样
- 高优先级的会覆盖掉低优先级相同的属性
验证属性互补
修改配置文件:
classpath:配置文件
删除spring.application.name属性,增加server.error.path属性
server.port=8080
server.error.path=/test
file:./配置文件
新增server.servlet.context-path属性
spring.application.name=file:.
server.port=8082
server.servlet.context-path=file_context
file:./config/*/配置文件
保持不变
server.port=8084
spring.application.name=file:./config/*/
修改启动类main方法在控制台打印server.error.path
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String property = environment.getProperty("spring.application.name");
System.out.println("current spring.application.name="+property);
String errorPath = environment.getProperty("server.error.path");
System.out.println("errorPath="+errorPath);
}
启动项目
从上面截图中可以发现三个配置文件中的所有属性都被加载出来了,而且优先级高的配置文件中的属性会覆盖优先级低的配置文件中的属性。
总结
springboot中可以配置多个配置文件,并且这些配置文件是可以共存的。当属性相同时,优先级高的配置文件会覆盖优先级低的配置文件中的属性;当属性不同时,最终的配置会取各个配置文件中属性的并集。
到此这篇关于SpringBoot详细讲解多个配置文件的配置流程的文章就介绍到这了,更多相关SpringBoot配置文件内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:SpringBoot详细讲解多个配置文件的配置流程
基础教程推荐
- Java实现查找文件和替换文件内容 2023-04-06
- java基础知识之FileInputStream流的使用 2023-08-11
- Java数据结构之对象比较详解 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java文件管理操作的知识点整理 2023-05-19
- java实现多人聊天系统 2023-05-19
- Java并发编程进阶之线程控制篇 2023-03-07
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- springboot自定义starter方法及注解实例 2023-03-31
- Java实现线程插队的示例代码 2022-09-03