前言:
在Spring框架中,配置文件的优先级是一个重要的概念,尤其是在Spring Boot和Spring Cloud项目中。理解这些配置文件的加载顺序和优先级对于项目的维护和调试至关重要。本文将详细探讨application.properties、application.yml和bootstrap.yml文件的优先级和加载顺序。
在开发过程中,使用多个配置文件是常用的做法。这样做的好处有很多:
1:环境隔离
- 开发环境:开发人员可以在本地环境自由的更改配置,不会影响生产环境。
- 测试环境:测试团队可以设置特定的测试配置,例如模拟数据或特定的测试服务端点。
- 生产环境:生产环境的配置通常是严格控制的,确保应用程序在上线后能够稳定运行。
2:模块化控制
- 模块配置:大型项目往往由多个模块组成,每个模块有自己的配置需求。
- 插件配置:如果项目使用了插件或扩展,每个插件可能需要独立的配置文件。
3:部署灵活性:
- 多环境部署:不同的部署环境(如开发、测试、预发布、生产)可以有不同的配置文件、便于管理和切换。
假如你有一个springboot项目,可能有以下配置文件:
application.properties(xml/xaml)
:默认配置文件,包含通用配置。application-
{profile}.properties(xml/xaml)
:开发/测试/生产等环境专用配置。security.properties(xml/xaml)
:安全相关配置,如密码、密钥等。db-config.properties(xml/xaml)
:数据库相关配置。
优先级(由高到低):
1:命令行参数(优先级最高)
jar包外的参数 > jar包内的配置
我在application.properties中设置了端口号 server.port=8080
当我使用命令行时 java -jar your-application.jar --server.port=8088
执行后发现应用在8088上运行,这就是因为命令行传参优先级最高。
2:按文件位置
当没有jar包外的参数时,优先加载一下位置的配置文件
-
1级:pro-dir:config/application.yml 【最高】
- 当前项目project所在目录的/config目录下
-
2级:pro-dir:application.yml
- 当前项目project所在目录下
-
3级:classpath:config/application.yml
- classpath的/config目录
-
4级:classpath:application.yml 【最低】【常用】
- classpath的根目录
3:按文件类型
当没有命令行传参,并且文件都在同一路径下时,就按类型加载
.properties
> .yml
> .yaml
测试方法(直接测试法,比较法):
先在项目中上述的不同位置的添加一个配置文件,并给每个文件中加一个不同的端口号,
然后通过命令行指定端口号启动项目。可以发现应用在命令行指定的端口上运行,得出命令行>项目内配置。
通过在idea启动项目逐步分析,得出不同文件位置,加载优先级也不同。
最后,在同一路径下添加三个不同类型的配置文件,再次启动,比较出properites>xml>xaml。
感兴趣的可以按照测试方法尝试一下!