当前位置: 首页 > news >正文

SpringBoot配置文件加载优先级

目录

示例

配置文件&编写配置类


在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低:

  1. 命令行参数: 命令行参数具有最高的优先级。SpringBoot项目被启动时,可以通过命令行传递参数,这些参数将覆盖其他所有配置源中的相同属性。

    java -jar your-application.jar --spring.datasource.url=jdbc:mysql://localhost:3306/mydb
  2. 环境变量: 环境变量的优先级高于配置文件。在操作系统中设置的环境变量可以被Spring Boot应用读取,并用于覆盖配置文件中的属性。

  3. Java系统属性: 通过Java的 -D 参数设置的系统属性也具有较高的优先级,可以覆盖配置文件中的属性。

    java -Dspring.datasource.url=jdbc:mysql://localhost:3306/mydb -jar your-application.jar
  4. 配置文件中的@PropertySource注解 如果在配置类上使用了 @PropertySource 注解指定了额外的配置文件,那么这些文件中的属性将按照注解中指定的顺序被加载,具有较高的优先级。

  5. 配置文件(application.properties 或 application.yml) 位于 src/main/resources 目录下的 application.propertiesapplication.yml 文件中的属性具有中等优先级。如果上述配置源中没有定义某个属性,那么Spring Boot将从这些文件中读取该属性。

  6. 配置类(@ConfigurationProperties使用 @ConfigurationProperties 注解的配置类中的属性具有较低的优先级。如果上述配置源中没有定义某个属性,那么Spring Boot将从这些配置类中读取该属性。

  7. 默认值: 当所有配置源中都没有定义某个属性时,Spring Boot将使用该属性的默认值(如果存在)。

示例

假设这里有一个名为 spring.datasource.url 的配置属性,可以在多个地方定义它:

  • 命令行参数:--spring.datasource.url=jdbc:mysql://localhost:3306/mydb

  • 环境变量:SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb

  • Java系统属性:-Dspring.datasource.url=jdbc:mysql://localhost:3306/mydb

  • @PropertySource 注解指定的配置文件

  • application.propertiesapplication.yml 文件

  • 使用 @ConfigurationProperties 注解的配置类

Spring Boot将按照上述优先级顺序查找这个属性。如果在命令行参数中找到了该属性,那么它将被应用;如果命令行参数中没有定义,那么Spring Boot将继续查找环境变量、系统属性等,直到找到该属性或找不到最终使用默认值。

配置文件&编写配置类

特点配置文件方式 (spring.datasource.type)Java 配置类方式
实现方式在 application.properties 或 application.yml 中添加配置编写一个 Java 配置类
代码量极低,只需添加一行配置,需要编写一个配置类
灵活性普通,通过修改配置文件即可切换数据源,可以通过代码动态修改数据源配置
适用场景适用于大多数简单场景,尤其是不需要动态修改数据源配置的项目适用于需要动态修改数据源配置,或者需要更复杂的初始化逻辑的项目
可维护性,配置集中管理,易于修改,需要维护 Java 配置类代码
是否需要额外依赖需要引入 Druid 依赖需要引入 Druid 依赖
是否需要额外代码不需要需要编写配置类代码
是否支持动态修改不支持,只能通过修改配置文件并重启应用支持,可以通过代码动态修改数据源配置
是否支持高级配置支持,可以通过 spring.datasource.druid.* 配置高级属性支持,可以通过代码设置高级属性
http://www.dtcms.com/a/80338.html

相关文章:

  • 最大公约数(GCD)和最小公倍数(LCM)专题练习 ——基于罗勇军老师的《蓝桥杯算法入门C/C++》
  • 蓝桥杯2023年第十四届省赛真题-接龙数列
  • Linux后门程序工作原理的详细解释,以及相应的防御措施
  • c语言数据结构 双循环链表设计(完整代码)
  • Ubuntu版免翻墙搭建BatteryHistorian
  • freeswitch(开启抓包信息)
  • 观察RenderDoc截帧UE时“Event”代表什么
  • ssh 多重验证的好处:降低密钥长度,动态密码
  • 分布式任务调度
  • 事件响应计划:网络弹性的关键
  • C++ :try 语句块和异常处理
  • IDEA批量替换项目下所有文件中的特定内容
  • Python Cookbook-4.7 在行列表中完成对列的删除和排序
  • 主流加固方案深度剖析(梆梆/腾讯/阿里)
  • 《数据库原理教程》—— 第三章 关系数据模型 笔记
  • 解释 RESTful API,以及如何使用它构建 web 应用程序
  • Linux驱动开发实战(七):pinctrl引脚管理入门结合数据手册分析
  • Powershell WSL导出导入ubuntu22.04.5子系统
  • 1.5.5 掌握Scala内建控制结构 - 异常处理
  • 编写脚本在Linux下启动、停止SpringBoot工程
  • 强大的AI网站推荐(第一集)—— Devv AI
  • 串口部分问题
  • 21、web前端开发之html5(二)
  • Deepseek+飞书实现简历分析建议+面试题
  • Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南
  • Day37 | 739. 每日温度、496. 下一个更大元素 I、503. 下一个更大元素 II、42. 接雨水、84. 柱状图中最大的矩形
  • PH热榜 | 2025-03-19
  • Windows10抓包工具Wireshark下载、安装、使用
  • Java基础面试题学习
  • selenium(鼠标操作、页面操作、用例设计)