Spring Boot - ConfigDataEnvironmentPostProcessor(Boot 2.4)搞定配置文件加载优先级

简介: Spring Boot - ConfigDataEnvironmentPostProcessor(Boot 2.4)搞定配置文件加载优先级

20210516092951966.png

低版本 ConfigFileApplicationListener


我们知道 以前我们的配置文件的优先级 是由 ConfigFileApplicationListener 处理的


0d41c75de6434a398a69257ced640924.png

9d8b6cb79584486da62e44bee7c5d7c6.png

大意如下:

EnvironmentPostProcessor通过从众所周知的文件路径加载properties来配置上下文环境。默认的properties来自
application.properties/application.yml文件,这些文件来自以下路径“,
file:./config/ 根文件夹(项目文件夹)下的config目录
file:./config/{@literal *}/ 根文件文件夹(项目文件夹)下的config/*/目录
file:./ 根文件文件夹(项目文件夹)下
classpath:config/ classpath下的config/
classpath: classpath下


新版本 ConfigDataEnvironmentPostProcessor


从2.4开始, 改成了 ConfigDataEnvironmentPostProcessor


44e13089745d47a18420667c3e909bc0.png


我们继续看下 ConfigDataEnvironment


70362878e13647f4b04771e4d5556cfa.png

规则有点变化 项目根路径下的config 项目根路径下的config/*/ 调整了顺序


规则验证

[classpath] classpath:application.properties vs classpath:application.yml

53eead71f5404eafb05b8d5816f249f0.png

 Tomcat started on port(s): 9999 (http) with context path ''

配置的main/resources其实就是上面的classpath


[classpath] resources/config(运行路径:classpath:/config/)下有application.properties


85fc112f231d42a8a2777c57e90f7dca.png


Tomcat started on port(s): 7777 (http) with context path ''


resouces/config的优先级大于resources,即,classpath:/config/>classpath:/


[file] 项目根路径下的application.properties

在项目的根路径下新建了application.properties文件,起server.port为6666


ca38f8ff611144d88f0e15666ac0ab98.png


启动端口为 6666

优先级为:file:/>classpath:/config/>classpath:/


[file] 项目根路径下config的application.properties


297e23e2d8ff4cb7bbf0fd103bb9d1a5.png启动端口 4444


[file] 项目根路径下config/xxxx的application.properties


在项目的路径下增加config/artisan/路径,且增加application.properties文件,端口号 5555

5ff99e71fcc04b53a05fea6ab19beefb.png

启动端口 555


小结


同级下,application.properties文件优先级大于application.yml,前者会覆盖后者


springboot的默认加载路径有5个,分别是classpath:/、classpath:/config/、项目根路径、项目根路径/config/*/、项目根路径/config/,会从这5个路径下加载application.properties或application.yml


5个默认的加载路径的优先级为:项目根路径下的config/*/ > 项目根路径下的config > 项目根路径 > classpath:/config > classpath:/,前者会覆盖后者

相关文章
|
1月前
|
XML Java 数据格式
Spring从入门到入土(xml配置文件的基础使用方式)
本文详细介绍了Spring框架中XML配置文件的使用方法,包括读取配置文件、创建带参数的构造对象、使用工厂方法和静态方法创建对象、对象生命周期管理以及单例和多例模式的测试。
83 7
Spring从入门到入土(xml配置文件的基础使用方式)
|
21天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
4天前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
10 2
|
4天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
15 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
16天前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
43 3
|
30天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
1月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
46 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
|
1月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
58 2
|
1月前
|
Java Shell C++
Springboot加载注入bean的方式
本文详细介绍了Spring Boot中Bean的装配方法。首先讲解了使用@Component、@Service、@Controller、@Repository等注解声明Bean的方式,并解释了这些注解之间的关系及各自适用的层次。接着介绍了通过@Configuration和@Bean注解定义Bean的方法,展示了其灵活性和定制能力。最后讨论了@Component与@Bean的区别,并提供了在Spring Boot应用中装配依赖包中Bean的三种方法:使用@ComponentScan注解扫描指定包、使用@Import注解导入特定Bean以及在spring.factories文件中配置Bean。