2-2.配置文件分类
约 1027 字大约 3 分钟
2025-06-23
Spring Boot 提供了配置文件和临时属性两种方式来进行程序配置,本文主要介绍 Spring Boot 的配置文件。虽然我们一直都在使用配置文件,但实际上我们使用的是 Spring Boot 提供的 4 级配置文件中的一个级别。这 4 个级别分别是:
- 类路径下配置文件 (resources 目录下的
application.yml
文件) - 类路径下 config 目录下配置文件 (resources/config 目录下的
application.yml
文件) - 程序包所在目录中配置文件
- 程序包所在目录中 config 目录下配置文件
这 4 种文件提供了 4 种不同的配置文件书写位置,它们的功能都是一样的,都是用于配置程序。关键在于它们的位置不同,因此产生了加载优先级上的差异。如果 4 种配置文件同时存在,且包含相同的配置项,那么优先级高的配置文件会覆盖优先级低的配置文件的配置。上述 4 种配置文件的加载优先级顺序如下:
file: config/application.yml
【最高】file: application.yml
classpath: config/application.yml
classpath: application.yml
【最低】
那么,为什么要设计成多种配置方式呢?考虑以下场景:
- 场景 A: 作为开发人员,为了方便开发,你通常会将数据库连接配置为连接你自己的本地数据库。此时,你可以使用第 4 级别的配置文件,也就是我们之前一直使用的
application.yml
文件。 - 场景 B: 项目开发到联调测试阶段,需要连接测试服务器的数据库,因此需要更换一组配置。你可以选择直接修改之前的配置文件,但如果配置项较多,会比较麻烦。
- 场景 C: 测试完成后,一切正常。当你继续编写代码时,发现原来的配置文件已经被修改为测试服务器的配置。此时,你必须再改回来。如果频繁地在不同环境之间切换,重复修改配置文件会非常繁琐。
一个简单的解决方案是使用第 3 级别的配置文件。你可以同时保留两个配置文件。由于 config
目录中的配置加载优先级高于第 4 级别,因此,如果两个配置文件中存在相同的配置项,config
目录中的配置会覆盖 application.yml
中的配置。这样就能够很方便地切换不同环境的配置,而无需反复修改同一个文件。
那么,第 1 和第 2 级别什么时候使用呢?程序打包部署之后就可以使用这两个级别的配置文件。因为它们的优先级最高,可以轻松覆盖程序内部的配置,从而避免了配置冲突的问题。
总结
配置文件分为 4 种,它们分别服务于不同的角色和环境:
- 项目类路径配置文件 (classpath: application.yml):服务于开发人员本机开发与测试。
- 项目类路径 config 目录中配置文件 (classpath: config/application.yml):服务于项目经理整体调控。
- 工程路径配置文件 (file: application.yml):服务于运维人员配置涉密线上环境。
- 工程路径 config 目录中配置文件 (file: config/application.yml):服务于运维经理整体调控。
多层级配置文件间的属性采用叠加并覆盖的形式作用于程序。也就是说,如果高优先级的配置文件中存在与低优先级配置文件中相同的配置项,则高优先级的配置会覆盖低优先级的配置;如果高优先级的配置文件中不存在某个配置项,则使用低优先级的配置。
通过使用不同优先级的配置文件,Spring Boot 能够灵活地适应各种开发、测试和生产环境的需求,提高开发效率,简化部署流程。