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

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

相关文章:

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

在使用 Spring Boot 进行开发时,配置文件是非常重要的一部分,它可以用来配置应用程序的行为、数据源、日志级别等信息。 但是,当配置文件中存在多个配置来源时,Spring Boot 是如何确定读取配置的优先级顺序的呢? 本文…...

数据挖掘(二)数据预处理

前言 基于国防科技大学 丁兆云老师的《数据挖掘》 数据挖掘 数据挖掘(一)数据类型与统计 2、数据预处理 2.1数据清理 缺失值处理: from sklearn.impute import SimpleImputer# 创建一个SimpleImputer对象,指定缺失值的处理策略…...

docker学习-docker常用其他命令整理

随便写写,后面有空再更新 镜像命令,容器命令已在之前略有更新,这次不写, 一、后台启动命令 # 命令 docker run -d 容器名 # 例子 docker run -d centos # 启动centos,使用后台方式启动 # 问题: 使用doc…...

【matlab基础知识代码】(十六)代数方程的图解法多项式型方程的准解析解方法

>> ezplot(exp(-3*t)*sin(4*t2)4*exp(-0.5*t)*cos(2*t)-0.5,[0 5]), line([0 5],[0 0]) 验证 >> t0.6738; >> exp(-3*t)*sin(4*t2)4*exp(-0.5*t)*cos(2*t)-0.5 ans -2.9852e-04 >> ezplot(x^2*exp(-x*y^2/2)exp(-x/2)*sin(x*y)) >> hold on; …...

智能奶柜:健康生活新风尚

智能奶柜:健康生活新风尚 在快节奏的都市生活中,健康与便利成为了现代人的双重追求。而在这两者交汇之处,智能奶柜应运而生,它不仅是科技与生活的完美融合,更是日常营养补给的智慧之选。 清晨的第一缕温暖 —— 新鲜…...

SpringBoot 集成 FFmpeg 解析音视频

文章目录 1 摘要2 核心 Maven 依赖3 核心代码3.1 FFmpeg 解析音视频工具类3.2 音视频文件信息参数3.3 音视频文件上传Controller3.4 application 配置文件 4 测试数据4.1 视频文件解析4.2 音频文件解析 5 注意事项5.1 文件必须在本地 6 推荐参考文档7 Github 源码 1 摘要 FFmp…...

基于单片机的直流电机测速装置研究与设计

摘要: 基于单片机的直流电机测速装置采用了对直流电机的中枢供电回路串联取样电阻的方式实现对电机转速的精确实时测量。系统由滤波电路、信号放大电路、单片机控制电路以及稳压电源等功能模块电路构成。工作过程中高频磁环作为载体,利用电磁感应的基本原理对直流电…...

【快捷部署】022_ZooKeeper(3.5.8)

📣【快捷部署系列】022期信息 编号选型版本操作系统部署形式部署模式复检时间022ZooKeeper3.5.8Ubuntu 20.04tar包单机2024-05-07 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff…...

引领AI数据标注新纪元:景联文科技为智能未来筑基

在人工智能蓬勃发展的今天,数据如同燃料,驱动着每一次技术飞跃。在这场智能革命的浪潮中,景联文科技凭借其深厚的专业实力与前瞻性的战略眼光,正站在行业前沿,为全球的人工智能企业提供坚实的数据支撑。 全国布局&…...

多模态大语言模型和 Apple 的 MM1

原文地址:multimodal-large-language-models-apples-mm1 2024 年 4 月 13 日 抽象是计算机科学中最关键的概念之一,具有一些最强大的影响。从简单的角度来看,抽象就是将某一事物应用于多种不同情况的能力。例如,如果你创造了一种…...

算法day04

第一题 : 209. 长度最小的子数组 有上题可知,我们会采用双指针和单调性的思路来解决 我们本题采用左右双指针从数组的0位置同向前进,所以将此类模型称为滑块; 步骤思路如下: 步骤一: 定义所有双指针都指向…...

电信网关配置管理系统 rewrite.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…...

从零学算法14

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs [“d…...

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中,向量无处不在,我想很多人都使用过向量类的内置方法 normalized() 吧,我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘,以达到角色朝任一方向移动时速度都相等的效果,但内部具体是如何将该向量进…...

html的i标签 “\e905“ font-family 字体没有效果

一、html的i标签 “\e905” 没有效果 在HTML和CSS中,\e905 这样的字符通常与字体图标(Font Icons)或自定义字体(Custom Fonts)中的Unicode字符相关。具体来说,\e905 是一个Unicode转义序列,但它…...

Golang reflect.MakeFunc() 的用法及示例

Golang 作为一门强类型语言,在某些场景下,我们需要动态地创建函数或者修改函数,这个时候就可以使用反射的方法去实现。在反射中,我们可以使用 reflect.MakeFunc() 方法来创建一个新的函数,本文我将介绍使用反射及其 Ma…...

深入学习和理解Django视图层:处理请求与响应

title: 深入学习和理解Django视图层:处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 tags: Django请求处理响应生成模板渲染表单处理中间件异常处理 第一章:Django框架概述 1.1 什么是Django?…...

【MySQL】SQL基本知识点DDL(1)

目录 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 注意:里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…...

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展,小程序作为一种轻量级、易传播的应用形态,逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式,与小程序结合后,不仅为观众提供了更为便捷的观看体验,…...

微服务下的技术栈架构解析

微服务是一种架构风格,它将一个复杂的应用拆分成多个独立自治的服务,每个服务负责应用程序中的一小部分功能。这些服务通过定义良好的API进行通信,通常是HTTP RESTful API或事件流。微服务架构的主要特点包括单一职责、自治性、可独立部署和扩…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...