springBoot项目配置文件加载优先级及同配置覆盖问题详解

springBoot的配置文件加载优先级及同配置覆盖问题是一个比较常见的问题,特别对于初学者来说,容易造成困扰。本文将详细讲解springBoot中配置文件加载优先级及同配置覆盖问题的详细攻略,并且提供两个示例说明。

配置文件的加载优先级

springBoot的配置文件有以下几种类型:

  • application.properties
  • application.yml
  • application.yaml
  • application.xml
  • application-.properties
  • application-.yml
  • application-.yaml
  • application-.xml

其中,profile是指springBoot中的profile,可以根据不同的环境加载不同的配置文件。配置文件的加载顺序如下:

  1. 项目根路径下的config目录中的配置文件;
  2. 项目根路径下的classpath目录中的配置文件;
  3. jar包内部的config目录中的配置文件;
  4. jar包内部的classpath目录中的配置文件;
  5. 所有jar包内部的/META-INF/spring.factories中指定的ApplicationListener。

可以看出,优先级从高到低,依次是项目根目录下的config目录、项目根目录下的classpath目录、jar包内部的config目录、jar包内部的classpath目录。如果同一配置文件在多个目录下都存在,那么优先使用优先级高的目录下的配置文件。

配置文件的同配置覆盖问题

在不同的配置文件中使用同样的配置项,那么应该以哪个配置文件中的项为准呢?答案是:后加载的配置文件中的配置项会覆盖先加载的配置文件中的同名配置项。

以下是两个示例说明:

示例一

本例中有两个配置文件:application.yml和application-dev.yml。application.yml中定义了database.host=127.0.0.1,application-dev.yml中定义了database.username=root。

# application.yml
database:
  host: 127.0.0.1

# application-dev.yml
database:
  username: root

在使用dev环境启动应用时,会先加载application.yml,再加载application-dev.yml。因此,最终的配置项如下所示:

database:
  host: 127.0.0.1
  username: root

可见,后加载的配置文件中的配置项覆盖了先加载的配置文件的同名配置项。

示例二

本例中有两个jar包:a.jar和b.jar。a.jar中的resources/application.yml中定义了database.host=127.0.0.1,b.jar中的resources/application.yml中定义了database.username=root。

# a.jar中的application.yml
database:
  host: 127.0.0.1

# b.jar中的application.yml
database:
  username: root

在启动应用时,会先加载a.jar中的application.yml,再加载b.jar中的application.yml。因此,最终的配置项如下所示:

database:
  host: 127.0.0.1
  username: root

可见,后加载的jar包中的配置文件会覆盖先加载的jar包的同名配置文件。

综上所述,对于配置文件的加载优先级及同配置覆盖问题,我们需要了解到所有的配置文件都会被加载,并且后加载的配置文件中的同名配置项会覆盖先加载的配置文件中的同名配置项,这点需要特别注意。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springBoot项目配置文件加载优先级及同配置覆盖问题详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • VsCode配置java环境的详细图文教程

    下面是VsCode配置Java环境的详细图文教程。 步骤一:安装JDK 首先需要下载和安装JDK,可以从Oracle官网上下载对应版本的JDK,下载地址: https://www.oracle.com/java/technologies/javase-downloads.html 根据操作系统选择合适的版本进行下载,安装时一路“下一步”即可。 步骤二:配置环…

    other 2023年6月27日
    00
  • golangstrconv包(类型转换、保留小数位)

    Go语言的strconv包提供了字符串和基本数据类型之间的转换功能,包括整数、浮点数、布尔值和Unicode字符等。本文将详细讲解strconv包的使用方法,包括类型转换和保留小数位,同时提供两个示例说明。 类型转换 字符串转整数 使用Atoi函数将字符串转换为整数: package main import ( "fmt" "s…

    other 2023年5月7日
    00
  • 你真的会使用Java的方法引用吗

    你真的会使用Java的方法引用吗 什么是方法引用? 在Java中,方法引用是一种用来简化Lambda表达式的方式。它允许您直接引用现有方法,而不是编写完整的Lambda表达式。方法引用是将方法视为数据的概念,可以像引用普通对象一样操作方法。 方法引用的语法 方法引用的语法如下: Class::MethodName 其中,Class代表类名或者对象名,Meth…

    other 2023年6月28日
    00
  • vue中select的使用以及select设置默认选中

    Vue中select的使用以及select设置默认选中 Vue是一款流行的JavaScript库,主要用于构建单页应用程序(SPA),而其中的模板语法和组件系统更是让开发人员的网页开发变得更为简洁、高效。 在Vue中,Select是用于从预定义选项中选择一个或多个值的表单控件。在此篇文章中,我们将介绍如何使用Vue中的Select,以及如何设置Select的…

    其他 2023年3月28日
    00
  • win10系统自带应用打不开怎么办?win10打不开系统自带应用程序解决方法

    Win10系统自带应用打不开的解决方法 问题描述 在Win10系统中,有时候会遇到自带的应用无法打开的情况,比如说“照片”、“日历”等应用程序无法正常启动。这种情况可能由于各种原因导致,包括系统配置问题、应用程序损坏等。 解决方法 方法一:重置应用程序 重置应用程序是最常用的解决方法之一,可以用来解决很多应用程序无法正常打开的问题。 打开“设置”应用程序,点…

    other 2023年6月25日
    00
  • 微信公众号平台接口开发 获取微信服务器IP地址方法解析

    微信公众号平台接口开发 获取微信服务器IP地址方法解析 微信公众号平台接口开发中,获取微信服务器IP地址是非常重要的一步。本攻略将详细介绍如何获取微信服务器IP地址的方法。 步骤一:获取access_token 在获取微信服务器IP地址之前,首先需要获取access_token。access_token是调用微信公众号接口的凭证,可以通过以下步骤获取: 向微…

    other 2023年7月31日
    00
  • C++超详细讲解函数重载

    C++超详细讲解函数重载 什么是函数重载? 函数重载是指允许多个函数具有相同的名称,但是它们的形参列表不同。也就是说,函数的名称相同,但是参数列表不同。这可以让我们用相同的函数名来完成不同的任务。 函数重载的原理是,编译器根据函数调用时传递的参数类型和数量等特征,在多个同名函数中选择一个最适合的函数来执行。 函数重载的语法 函数重载的语法非常简单。需要满足以…

    other 2023年6月26日
    00
  • java实现单链表之逆序

    Java实现单链表之逆序 数据结构 单链表是一种经典的数据结构,它是由一组节点组成,每个节点包含两部分,一是保存数据的部分,二是指向下一个节点的地址。单链表只能从前往后遍历,无法从后往前遍历。 逆序算法实现 迭代法 在迭代法中,我们需要先定义三个指针,分别为当前节点p、其前驱节点prev和其后继节点next。 首先让p指向当前链表的第一个节点,prev和ne…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部