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

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

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

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

1. 默认配置文件

Spring Boot 支持多种类型的配置文件,其中最常用的是 application.propertiesapplication.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.propertiesapplication.yml

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

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

2.2. 配置文件的加载顺序

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

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

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

3. 配置优先级顺序总结

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

  1. 外部化配置(命令行参数、系统属性、环境变量、JNDI 属性)优先级高于应用程序属性文件。
  2. 应用程序属性文件(application.propertiesapplication.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 中配置的优先级顺序,从而更好地使用和管理应用程序的配置。

相关推荐
缺点内向3 小时前
Java:创建、读取或更新 Excel 文档
java·excel
带刺的坐椅3 小时前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看5 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
桦说编程5 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t5 小时前
ZIP工具类
java·zip
lang201509285 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
言德斐6 小时前
SQL性能优化的思路及策略
数据库·sql·性能优化
码界奇点6 小时前
Django视图从基础到高级的全面解析
数据库·django·sqlite·web·python3.11
Allan_20256 小时前
数据库学习
数据库·学习
fen_fen6 小时前
人大金仓数据库kingbase8创建表示例
数据库·oracle