SpringBoot详细讲解多个配置文件的配置流程

网友投稿 332 2022-07-25


目录配置文件加载顺序验证前期准备验证配置文件加载顺序验证属性互补总结

一般情况下,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之后的KwVsZqoH版本将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=classpathserver.port=8080

为了验证 springboot 2.4.0之前和之后的版本加载顺序的不一样,会使用两个版本对比。

对比版本:springboot 2.4.3 和 springboot 2.3.5.RELEASE

下面是不同路径下配置不同端口和应用名以便验证。

路径端口号application.namefile:./config/*/8084file:./config/*/file:./config/8083file:./config/file:./8082file:./classpath:config/8081classpath:config/classpath:8080classpath:

验证配置文件加载顺序

根据上述表格,将配置文件分别复制到不同的路径下创建配置文件并按表格修改spring.application.name和server.port属性值。

启动项目,下面是两个版本的启动信息:

从两张图中可以得出结论:

springboot 2.4.0前后配置文件加载顺序不一样高优先级的会覆盖掉低优先级相同的属性

验证属性互补

修改配置文件:

classpath:配置文件

删除spring.application.name属性,增加server.error.path属性

server.port=8080server.error.path=/test

file:./配置文件

新增server.servlet.context-path属性

spring.application.name=file:.server.port=8082server.servlet.context-path=file_context

file:./config/*/配置文件

保持不变

server.port=8084spring.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中可以配置多个配置文件,并且这些配置文件是可以共存的。当属性相同时,优先级高的配置文件会覆盖优先级低的配置文件中的属性;当属性不同时,最终的配置会取各个配置文件中属性的并集。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java分析讲解序列化与字典功能的序列化
下一篇:一文搞懂Spring中的注解与反射
相关文章

 发表评论

暂时没有评论,来抢沙发吧~