SpringBoot内部外部配置文件加载顺序解析

我将详细讲解“SpringBoot内部外部配置文件加载顺序解析”的完整攻略。

SpringBoot内部外部配置文件加载顺序解析

在Spring Boot中,应用程序的配置信息可以通过内部和外部的两种方式进行加载。对于这两种方式,Spring Boot在加载时都有着不同的顺序和用途。

内部配置文件

内部配置文件是指在Spring Boot项目中,通过application.propertiesapplication.yml两个文件来定义一些配置信息,可以通过@Value@ConfigurationProperties注解来进行读取,例如:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456

这些配置信息在Spring Boot应用程序启动时会被加载,并且具有默认的优先级,即外部配置文件的优先级不会高于内部配置文件。

外部配置文件

外部配置文件是指在Spring Boot项目外,通过在运行时指定配置文件的方式进行加载。具体来说,可以通过以下几种方式来指定外部配置文件的路径:

  • 在命令行中指定:java -jar xxx.jar --spring.config.name=myapp --spring.config.location=classpath:/,file:/opt/myapp/

  • 通过环境变量指定:SPRING_CONFIG_NAME=myapp SPRING_CONFIG_LOCATION=classpath:/,file:/opt/myapp/ java -jar xxx.jar

  • 在JVM启动参数中指定:-Dspring.config.name=myapp -Dspring.config.location=classpath:/,file:/opt/myapp/

外部配置文件可以是.properties.yml格式,例如myapp.properties

server.port=8088

当存在外部配置文件时,Spring Boot会按照以下顺序逐个查找并加载:

  • /config文件夹下的application.propertiesapplication.yml

  • /目录下的application.propertiesapplication.yml

  • classpath下/config文件夹下的application.propertiesapplication.yml

  • classpath下的application.propertiesapplication.yml

  • 通过命令行参数指定的外部配置文件

  • 通过系统环境变量指定的外部配置文件

  • 通过JVM启动参数指定的外部配置文件

最后加载的配置信息具有最高优先级,会覆盖之前加载的同名配置项。

示例说明

下面通过两个示例来具体说明内部外部配置文件的加载顺序。

示例一

假设我们有一个Spring Boot项目,其默认的内部配置文件application.properties中配置了如下内容:

server.port=8080

同时,在项目外存在一个外部配置文件myapp.properties,其内容如下:

server.port=8081

那么当我们启动应用程序时,最终的配置结果是什么呢?

根据前面的讲解,我们可以得出结论,最终的端口号应该是8081,因为外部配置文件的优先级高于内部配置文件。

示例二

假设我们有一个Spring Boot项目,其默认的内部配置文件application.properties中配置了如下内容:

server.port=8080

同时,在项目外存在一个外部配置文件myapp.properties,其内容如下:

server.port=8082

现在,假设我们在启动应用程序时传入了以下命令行参数:

--spring.config.name=myapp --spring.config.location=classpath:/,file:/opt/myapp/

那么,最终的端口号会是多少呢?

根据前面的讲解,我们可以得出结论,最终的端口号应该是8082,因为命令行参数指定的外部配置文件优先级高于其他方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot内部外部配置文件加载顺序解析 - Python技术站

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

相关文章

  • 使用shutdown命令实现远程关机和重启

    当你想在远程服务器上执行关机或重启等操作时,可以使用shutdown命令。下面是使用shutdown命令实现远程关机和重启的完整攻略: 1. 登录远程服务器 使用SSH协议通过终端连接远程服务器。例如,在Linux系统上,可以使用以下命令登录: ssh <username>@<ip-address> 替换<username&gt…

    other 2023年6月27日
    00
  • 一篇文章学会两种将python打包成exe的方式

    本文将详细讲解两种将Python程序打包成exe可执行文件的方法。 方法一:使用pyinstaller pyinstaller是一种常用的将Python程序打包成exe文件的工具,它可以将Python程序的代码和资产打包成单个自立的可执行文件,并附带所使用的Python解释器和第三方库,大大方便了Python程序的分发和运行。下面将介绍如何使用pyinsta…

    other 2023年6月25日
    00
  • Spring Bean生命周期源码原理图解

    标准化的Markdown文本通常会包含以下内容: 标题 子标题 次级子标题 正文内容 列表项1 列表项2 列表项3 数字列表项1 数字列表项2 数字列表项3 代码块如下: 这里是代码块 int a = 1; String str = "hello"; System.out.println(str); 以下是“Spring Bean生命周期…

    other 2023年6月27日
    00
  • C语言变量类型与输出控制用法实例教程

    C语言变量类型与输出控制用法实例教程 变量类型 C语言是一种静态类型语言,变量需要在使用前声明类型,变量的类型决定了该变量可存储的数据类型和能够执行的操作。 基本类型 C语言中的基本类型包括整型、实型、字符型和布尔型。 整型 整型表示整数类型数据,其类型包括int、short、long和long long,它们根据其长度的不同存储不同范围的整数。 示例代码1…

    other 2023年6月27日
    00
  • 目标世界上最小的linux系统—ttylinux体验

    以下是关于“目标世界上最小的Linux系统—ttylinux体验”的完整攻略: 步骤1:下载ttylinux 首先,需要从ttylinux的官方网站ttylinux的ISO镜像文件。可以使用以下链接下载: http://www.minimalinux.org/download/ttylinux-16.1.iso 步骤2:创建虚机 在下载ttylinux后,需…

    other 2023年5月7日
    00
  • 快速创建React项目并配置webpack

    创建React项目并配置Webpack是一个非常基础且重要的操作,下面是详细的步骤。 步骤一:初始化项目 使用npm初始化项目,首先需要安装Node.js,然后使用npm命令初始化项目,具体命令为: npm init 步骤二:安装依赖包 React开发中需要安装的必要依赖包有:React、React-DOM,Webpack开发中需要安装的必要依赖包有:Web…

    other 2023年6月27日
    00
  • 教你升级到IOS9免开发者账号激活的方法

    教你升级到iOS 9免开发者账号激活的方法 苹果公司在iOS 9推出后,为了防止未经授权的App被安装到设备上,增加了对开发者账号的限制。如果你没有开发者账号,就无法安装一些自己编写的应用,或是一些非App Store上的应用。本文将向大家介绍一种免开发者账号激活的方法,以方便大家自由地使用自己的iOS设备。 步骤1. 下载iOS 9 Beta 苹果公司在推…

    other 2023年6月26日
    00
  • C++中的封装、继承、多态理解

    C++是一门支持面向对象编程(Object-Oriented Programming,简称OOP)的语言。在OOP中,封装、继承、多态是三个重要的概念。下面我们详细讲解每个概念及其在C++中的应用。 封装(Encapsulation) 封装是通过将一个类的数据和方法包装在一起来隐藏类的实现细节。也就是说,封装可以通过保护数据和方法的访问级别来实现隐藏实现细节…

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