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

相关推荐
CodeAmaz4 分钟前
RocketMQ整体工作流程_详解
java·rocketmq·rocketmq整体流程
刘一说4 分钟前
ES6+核心特性全面浅析
java·前端·es6
大学生资源网5 分钟前
基于springboot的农村综合风貌展示平台设计与实现(源码+文档)
java·数据库·spring boot·后端·毕业设计·源码·springboot
czlczl2002092510 分钟前
Spring Boot Filter 机制与 FilterRegistrationBean
java·spring boot·后端
严文文-Chris12 分钟前
RAG关键技术要点详解
java·服务器·前端
❀͜͡傀儡师15 分钟前
基于docker一键部署 x86的cpu_mem_hog 用于生成CPU和内存负载,用于服务器cpu和内存使用不达标的
java·服务器·docker
严文文-Chris16 分钟前
向量数据库选型完全指南
数据库
未来之窗软件服务17 分钟前
自建开发工具IDE(七)数据库集群智能升级东方仙盟数据库同化,五行八卦排序+游戏修仙,精准补齐差异还能圆武侠梦—东方仙盟筑基期
数据库·游戏·oracle·仙盟创梦ide·东方仙盟·东方仙盟架构·东方仙盟商业开发
蜡笔大新79818 分钟前
IO流的认识(2)
java·ide·intellij-idea
奔跑吧邓邓子19 分钟前
Neo4j图数据库实战:解锁关系数据的无限潜力
数据库·实战·neo4j