Spring Boot 读取配置优先级顺序是什么?

在使用 Spring Boot 进行开发时,配置文件是非常重要的一部分,它可以用来配置应用程序的行为、数据源、日志级别等信息。

但是,当配置文件中存在多个配置来源时,Spring Boot 是如何确定读取配置的优先级顺序的呢?

本文将深入探讨 Spring Boot 中配置的优先级顺序,并解释不同配置来源的加载顺序。

1. 默认配置文件

Spring Boot 支持多种类型的配置文件,其中最常用的是 application.properties 和 application.yml。这两种配置文件都可以用来配置应用程序的属性,但语法略有不同。

  • application.properties:采用键值对的方式配置属性。
  • application.yml:采用 YAML 格式配置属性,更加人性化和易读。

在 Spring Boot 应用程序中,这两种默认配置文件有着不同的加载优先级:

  1. application.properties 的加载优先级高于 application.yml。
  2. 如果同时存在同名的配置属性,application.properties 中的配置会覆盖 application.yml 中的配置。

2. 配置文件加载顺序

Spring Boot 在启动过程中会按照特定的顺序加载配置文件,以确定最终生效的配置属性。这个加载顺序是有规则的,主要包括以下几个方面:

2.1. 外部化配置

Spring Boot 提供了多种外部化配置的方式,包括:

  • 命令行参数
  • 系统属性
  • 环境变量
  • JNDI 属性
  • 应用程序属性文件(application.properties 或 application.yml)

这些外部化配置的加载顺序是固定的,从高到低分别是:

  1. 命令行参数:使用 -- 参数指定的配置。
  2. 系统属性:通过 -D 参数指定的系统属性。
  3. 环境变量:操作系统的环境变量。
  4. JNDI 属性:Java Naming and Directory Interface(JNDI)中定义的属性。
  5. 应用程序属性文件:application.properties 或 application.yml 中的配置。

2.2. 配置文件的加载顺序

对于应用程序属性文件(application.properties 或 application.yml),Spring Boot 会按照以下顺序加载不同位置的配置文件:

  1. 内嵌在应用程序中的默认配置文件。
  2. 外部配置文件,例如项目根目录下的 config/ 目录、当前目录、类路径下的 config/ 目录等。
  3. 额外的配置文件,例如通过 spring.config.location 属性指定的位置。

在加载这些配置文件时,Spring Boot 会按照指定的顺序逐个加载,后加载的配置会覆盖前面加载的配置。

3. 配置优先级顺序总结

综上所述,Spring Boot 中配置的优先级顺序可以总结如下:

  1. 外部化配置(命令行参数、系统属性、环境变量、JNDI 属性)优先级高于应用程序属性文件。
  2. 应用程序属性文件(application.properties 或 application.yml)中的配置优先级顺序为:内嵌默认配置 > 外部配置文件 > 额外配置文件。

4. 示例

下面通过一个示例来说明 Spring Boot 中配置的优先级顺序:

假设我们有一个 Spring Boot 应用程序,其中存在以下两个配置文件:

application.properties:

复制代码
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root

application.yml:

复制代码
# application.yml
spring:
  datasource:
    password: password123

在这个示例中,application.yml 中的 spring.datasource.password 属性会覆盖 application.properties 中的同名属性,因此最终的数据库密码为 password123。

5. 结论

Spring Boot 中配置的优先级顺序是非常重要的,它决定了应用程序的行为和属性的最终生效结果。

了解不同配置来源的加载顺序可以帮助我们更好地管理和调整应用程序的配置,确保应用程序的正确运行和行为符合预期。

希望本文能够帮助你理解 Spring Boot 中配置的优先级顺序,从而更好地使用和管理应用程序的配置。

相关推荐
wangchunyu1142 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck3 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir3 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人3 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521594 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
lzhdim4 小时前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来4 小时前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹4 小时前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB5 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
auspicious航5 小时前
PostgreSQL的备份与恢复
数据库·postgresql