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 中配置的优先级顺序,从而更好地使用和管理应用程序的配置。

相关推荐

  1. Spring Boot 读取配置优先级顺序什么

    2024-05-11 11:38:03       34 阅读
  2. SpringBoot配置优先级

    2024-05-11 11:38:03       35 阅读
  3. springboot使用@value读取配置

    2024-05-11 11:38:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 11:38:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 11:38:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 11:38:03       87 阅读
  4. Python语言-面向对象

    2024-05-11 11:38:03       96 阅读

热门阅读

  1. 前端表单中的手机号的验证

    2024-05-11 11:38:03       28 阅读
  2. 【贪心算法】Leetcode 134. 加油站【中等】

    2024-05-11 11:38:03       34 阅读
  3. Unity构建详解(12)——自动构建

    2024-05-11 11:38:03       27 阅读
  4. AlmaLinux 文件重命名 mv命令用法示例

    2024-05-11 11:38:03       33 阅读
  5. pnpm包管理工具的理解

    2024-05-11 11:38:03       31 阅读
  6. 根据地址栏url上key获取值

    2024-05-11 11:38:03       34 阅读
  7. JVM进程缓存 Caffeine

    2024-05-11 11:38:03       30 阅读