【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)(上)

简介: 【小家Spring】一篇文章彻底搞懂Spring Boot配置文件的加载顺序(项目内部配置和外部配置)(上)

说在前面


Spring这么流星很重要的一个思想是:配置化思想。从而达到解耦的目的,很多都不需要硬编码,配置一下即可完成,可谓大大提高了编码的效率。


Spring支持的配置文件加载的方式繁多,一方面是扩大了灵活性,另一方面其实也带来了较大的复杂性。因此本文旨在用一篇文章解决读者朋友的烦恼,同时有时候也是我的烦恼


加载项目内部配置文件


我们从https://start.spring.io初始化一个项目下来后,在resources目录下会放置一个application.properties文件。现在我们这么操作:

删除掉application.properties文件,新建一个application.yml文件,写上


config:
  icon: "classpath:resource_yml"


直接运行我的测试程序:


@RunWith(SpringRunner.class)
@SpringBootTest
public class Run2ApplicationTests {
    @Value("${config.icon}")
    private String key;
    @Test
    public void contextLoads() {
        System.out.println(key);
    }
}
输出:
classpath:resource_yml


因此我们可以知道,yml文件是完全可以代替application.properties文件的,事实也确实如此。SpringBoot支持这两种格式的配置文件。(Spring Framwork只支持application.properties)


如果application.properties和application.yml共存呢?


基于上面代码,我们再建立一个application.properties文件,写上相同的key

config.icon=classpath:resource


运行测试结果为:


classpath:resource


结论:


当application.properties和yml文件在并存时(同一目录下),application.properties优先级更好,会先读它,若它没有,再去读yml中的值


有了上面的结论,下面的演示仅演示application.properties文件


1、在Resource目录下创建config文件夹,然后放置properties配置文件


config.icon=classpath:resource/config


运行结果为:


classpath:resource/config


2、继续添加。在项目根目录创建一个配置文件


config.icon=file:


运行结果为:

file


3、继续添加。在项目的根目录创建一个文件夹config,然后放入配置文件

config.icon=file:/config


运行结果为:


file:/config


看看我们现在的配置文件结构和运行顺序:


image.png


似乎我们已经掌握了Spring Boot加载这个的顺序和优先级。


我们可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:


private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

看看Spring Boot官网怎么说


官方文档说明:


image.png


翻译成文件系统:


–file:./config/
–file:./
–classpath:/config/
–classpath:/


译成语言如下(按照优先级从高到低的顺序):


1.先去项目根目录找config文件夹下找配置文件件


2.再去根目录下找配置文件


3.去resources下找cofnig文件夹下找配置文件


4.去resources下找配置文件


整个设计非常巧妙。SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。


备注:


这里说的配置文件,都还是项目里面。最终都会被打进jar包里面的,需要注意。


1、如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。

2、如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。

3、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下”


项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置。(这个很多时候在运维时经常用到)


指定配置文件和默认加载的这些配置文件共同起作用形成互补配置。


java -jar run-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties



相关文章
|
4天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
20 0
|
22天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
5天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
17 2
|
14天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
27 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
144 1
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
152 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
18天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
16天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
218 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统