网站首页 > 博客文章 正文
配置文件,作为Spring Boot中的一个重要的组成部分,其加载顺序决定了不同来源的配置文件如何被合并覆盖使用,在Spring Boot中通过配置文件加载的优先级来决定加载和解析使用那些配置文件箱,不同的配置文件按照来源以及优先级进行加载会覆盖前面的配置文件项。下面我们就来详细介绍一下Spring Boot中配置文件的加载顺序。
命令行参数
命令行参数的配置有限级最高,在Spring Boot加载配置的时候首先会解析通过命令行传递的参数,例如,在启动jar包的时候,通过命令行传递的参数,如下所示。
java -jar myapp.jar --server.port=8081 --spring.profiles.active=prod
这个命令行参数会覆盖其他所有配置文件中关于server.port 和 spring.profiles.active 的配置,所以优先级是最高的。
SPRING_CONFIG_NAME环境变量
如果在环境变量中设置了SPRING_CONFIG_NAME,那么这个配置将会加载指定的配置文件,在默认情况下Spring Boot会加载 application.properties 或 application.yml。但如果该环境变量被设置了,Spring Boot 会加载指定的文件,如下所示。
export SPRING_CONFIG_NAME=myapp
java -jar myapp.jar
这种情况下,SpringBoot就会尝试加载myapp.properties 或 myapp.yml 配置文件,而不是默认的 application.properties 或 application.yml。
外部配置文件
在Spring Boot中我们还可以通过 --spring.config.location 或 --spring.config.name 参数指定外部配置文件的位置,当然如果没有指定,那么Spring Boot就会默认从classpath:/config/ 或 classpath:/ 中查找对应的配置文件,如下所示。
java -jar myapp.jar --spring.config.location=file:/path/to/config/application.properties
这种情况下Spring Boot 会优先加载 /path/to/config/application.properties。
默认位置
在默认情况下Spring Boot的配置文件会被放在src/main/resources 目录下,也就是说默认加载的是 application.properties 或 application.yml 文件,如果在该路径下存在多个配置文件,那么Spring Boot就会按照如下的顺序进行查找。
- classpath:/config/application.properties或classpath:/config/application.yml
- classpath:/application.properties或classpath:/application.yml
这两个位置的配置文件的加载顺序取决于文件在项目中的位置,例如/config/ 路径中的文件会优先于根目录中的文件加载。
application-{profile}.properties或application-{profile}.yml文件
这种配置文件是Spring Boot通过Spring Profiles机制来区分不同环境下需要加载的配置文件,如果指定了活动的 profile,那么Spring Boot就会加载对应的配置文件,这个配置文件的优先级相对来说比较低一点。如下所示。
# application.properties
spring.profiles.active=dev
这种情况下Spring Boot就会默认加载application-dev.properties 或 application-dev.yml 文件。而这类配置文件的加载顺序也是跟上面提到的默认的配置文件加载顺序类似,如下所示。
classpath:/config/application-dev.properties` 或 `classpath:/config/application-dev.yml
classpath:/application-dev.properties` 或 `classpath:/application-dev.yml
如果没有 dev 配置文件,Spring Boot 会回退到 application.properties 或 application.yml 文件。当然如果在命令行启动的时候,在命令行环境变量中指定了spring.profiles.active,它会覆盖配置文件中的 spring.profiles.active 设置。
JVM 系统属性
在有些项目中,如果在项目启动的时候通过JVM的系统属性来传递了参数,那么这种情况下这个配置业务覆盖配置文件中的属性,但是这种覆盖要比之前的参数配置覆盖等级要低,如下所示。
java -Dserver.port=8082 -jar myapp.jar
这种情况下,server.port 会被设置为 8082,覆盖掉配置文件中 server.port 的值,但是如果有其他的配置文件再次进行覆盖的话,那么这个值就会被其他的配置文件所覆盖了。
环境变量
之前我们提到了一个SPRING_CONFIG_NAME环境变量,这里我们介绍的是Java的环境变量,这个环境变量的配置也会将配置文件的中配置项的值进行覆盖如下所示。
export SERVER_PORT=8083
java -jar myapp.jar
此时,server.port 会被设置为 8083,覆盖配置文件中的值。
Spring ApplicationContext 默认配置
这种方式是Spring Boot中等级最低的一种配置加载方式,会默认加载一些配置项,但是这些配置项都会被后续的相关配置项所覆盖,例如默认的 server.port 是 8080,默认的数据库连接配置等。
配置加载顺序总结
优先级 | 配置来源 |
1 | 命令行参数(如 java -jar --server.port=8081) |
2 | SPRING_CONFIG_NAME 环境变量 |
3 | 外部配置文件(--spring.config.location) |
4 |
|
5 |
|
6 | application-{profile}.properties 或 application-{profile}.yml |
7 | JVM 系统属性(如 -Dserver.port=8082) |
8 | 环境变量(如 export SERVER_PORT=8083) |
9 | 默认配置(Spring Boot 内置的默认值) |
猜你喜欢
- 2025-05-05 Springboot项目中几种跨域的解决方法
- 2025-05-05 快来试试这款一行代码实现多平台文件存储的工具!
- 2025-05-05 Spring Boot3 整合 Redis 实现数据缓存操作全解析
- 2025-05-05 Spring Boot 优雅实现多租户架构(多租户开源框架 java)
- 2025-05-05 手把手教你搭建Spring Boot项目(springboot工程搭建步骤)
- 2025-05-05 第三章:SpringBoot 配置文件(springboot配置文件详解)
- 2025-05-05 Spring Boot3 整合 Thymeleaf 模板引擎全攻略
- 2025-05-05 震碎认知!将原理融会贯通到顶点的SpringBoot实战项目
- 2025-05-05 Spring Boot3 整合 Nacos 实现配置管理全解析
- 2025-05-05 Spring Boot日志配置全解析:模式选择与最佳实践
你 发表评论:
欢迎- 368℃用AI Agent治理微服务的复杂性问题|QCon
- 363℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 347℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 343℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)