SpringBoot 配置文件加载位置与优先级问题详解

yizhihongxing

下面我来详细讲解一下 Spring Boot 配置文件加载位置与优先级问题的攻略。

1. Spring Boot 配置文件的加载位置

Spring Boot 配置文件的加载位置非常灵活,可以根据不同的需求和情况进行配置。Spring Boot 配置文件的加载位置可以分为以下三种情况:

1.1 classpath下的默认加载位置

Spring Boot 默认会从 classpath 下的 /config 目录、/ 目录、classpath:/config/ 目录和 classpath:/ 目录下加载名称为 application 的配置文件。其中优先级从高到低分别为 /config 目录、/ 目录和 /config/ 目录。

示例1:

# src/main/resources/application.properties
server.port=8080

1.2 指定配置文件路径

除了默认的加载位置外,还可以通过指定配置文件的路径来加载。例如,可以通过在项目启动时加入 JVM 参数 -Dspring.config.location 来指定配置文件的路径。

示例2:

java -jar -Dspring.config.location=/usr/local/config/application.properties myproject.jar

1.3 指定配置文件名称

除了默认的 application.propertiesapplication.yml 文件外,还可以通过指定配置文件名称来加载其他的配置文件。例如,可以通过在项目启动时加入 JVM 参数 -Dspring.config.name 来指定配置文件的名称。

示例3:

java -jar -Dspring.config.name=myappconfig -Dspring.config.location=/usr/local/config/ myproject.jar

2. Spring Boot 配置文件的优先级

上面讲到了 Spring Boot 配置文件的加载位置,接下来我们来了解一下 Spring Boot 配置文件的优先级问题。Spring Boot 配置文件的优先级从高到低分别为:命令行参数、Java 系统属性、操作系统环境变量、application-{profile}.propertiesapplication-{profile}.ymlapplication.propertiesapplication.yml

2.1 命令行参数

命令行参数和其他来源的属性设置会合并成同一个environment。命令行参数的优先级最高。

示例4:
```shell script
java -jar myproject.jar --server.port=8080


### 2.2 Java 系统属性

可以通过在命令行启动 Java 时设置 `-D` 参数来设置 Java 系统属性。Java 系统属性的优先级高于操作系统环境变量。

示例5:
```shell script
java -jar myproject.jar -Dserver.port=8080

2.3 操作系统环境变量

可以通过设置操作系统环境变量来设置配置项的值,但是需要遵循相应的规则。例如:在 Linux 下环境变量的名称需要全部大写,变量名称中的句点(.)需要被转换为下划线(_),并且需要以 SPRING_PROFILES_ACTIVE 开头。环境变量的优先级高于 application-{profile}.propertiesapplication-{profile}.yml

示例6:
```shell script
export SPRING_APPLICATION_JSON='{"server.port":8080}'


### 2.4 application-{profile} 属性文件

可以通过在配置文件名中添加`{profile}`来激活某个配置文件。`{profile}`的值可以通过spring.profiles.active属性来指定。例如,`application-test.properties` 文件将在测试环境中使用,`application-prod.properties` 文件将在生产环境中使用。`application-{profile}.properties` 或 `application-{profile}.yml` 的优先级高于 `application.properties` 或 `application.yml`。

示例7:

application-test.properties

server.port=8080


### 2.5 application.properties 或 application.yml

`application.properties` 或 `application.yml` 是默认的配置文件名,它们的作用范围是全局的,即所有的环境都会生效。这种方式的优先级最低。

示例8:
```yaml
# application.yml
server:
  port: 8080

通过以上内容的介绍,相信大家已经对 Spring Boot 配置文件的加载位置与优先级问题有了更深入的了解。如果还有疑问,欢迎在评论区留言,我们一起来讨论。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 配置文件加载位置与优先级问题详解 - Python技术站

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

相关文章

  • 利用python来跟踪ip地址的方法

    利用Python来跟踪IP地址的方法 在Python中,我们可以使用一些库和工具来跟踪IP地址。下面是一个详细的攻略,介绍了如何使用Python来跟踪IP地址,并提供了两个示例说明。 1. 使用socket库获取IP地址 socket库是Python的标准库之一,它提供了一种获取IP地址的简单方法。下面是一个示例代码,演示了如何使用socket库获取IP地址…

    other 2023年7月30日
    00
  • oracle mysql 拼接值遇到的坑及双竖线 || concat详解

    标题:Oracle MySQL 拼接值遇到的坑及双竖线 || CONCAT 详解 介绍 拼接字符串在数据库操作中是一个常用的操作。在 Oracle MySQL 中,一般使用 MySQL 自带的 CONCAT 函数拼接字符串。但是使用 CONCAT 函数的时候,可能会遇到一些坑,本篇攻略将代码示例和文字详细说明,帮助读者更好地理解使用 CONCAT 函数拼接字…

    other 2023年6月25日
    00
  • 从零开始打造mock平台-核心篇

    以下是详细讲解“从零开始打造mock平台-核心篇的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: 从零开始打造mock平台-核心篇 Mock平台是一种用于模拟API接口数据的工具,可以帮助开发人员在开发过程中快速构建和测试API接口。本攻略将介绍从零开始打造mock平台的核心步骤和技术。 步骤一:选择Mock平台框架 可以选择以下几种…

    other 2023年5月10日
    00
  • keiluvision2自学教程

    以下是关于“Keil uVision2自学教程”的完整攻略,包括定义、方法、示例说明和注意事项。 定义 Keil uVision2是一款嵌入式系统开发工具,它可以用于编写、调试和测试嵌入式系统的代码。Keil uVision2具有友好的用户界面和强大的功能,可以帮助开发人员快速开发高质量的嵌入式系统。 方法 以下是学习Keil uVision2的方法: 下载…

    other 2023年5月8日
    00
  • 小白学数据分析—>ARPDAU的价值

    小白学数据分析—>ARPDAU的价值 作为一名网站的站长,想要提高网站的盈利能力,数据分析是必不可少的工具。其中,ARPDAU是一项很重要的指标,特别是对于移动应用和游戏来说,其价值更不言而喻。 ARPDAU是什么 ARPDAU是Average Revenue Per Daily Active User的缩写,中文翻译为每日活跃用户平均收入。这个指…

    其他 2023年3月28日
    00
  • GO语言基础之数组

    GO语言基础之数组 在GO语言中,数组是具有固定长度且元素类型相同的一组数据。数组在GO语言中作为一种基础数据类型,常用于存储一组有序的数据。 数组的定义 数组可以使用var关键字进行定义,语法格式如下: var arrayName [arrayLength]arrayType 其中,arrayName是数组的名称,arrayLength是数组的长度,arr…

    other 2023年6月25日
    00
  • 解释执行和编译执行的区别?

    当我们编写代码的时候,我们需要将代码转换成计算机可以理解和执行的语言,那么将代码转换成可执行指令的过程,就可以分为两种方式,一种是通过编译执行,另一种是通过解释执行。 编译执行 编译执行是指在代码执行前,先进行整个程序的编译,把程序源代码全部编译成计算机可执行的代码,这个可执行文件可以被多次运行,因此编译执行的好处在于它可以更快地执行代码。其一次性的编译过程…

    other 2023年6月26日
    00
  • php 静态属性和静态方法区别详解

    PHP 静态属性和静态方法区别详解 1. 静态属性 静态属性是属于类的属性,不属于类的实例对象。它可以在类内部定义,并且通过self::或类名::的方式访问,而不需要实例化类。 静态属性的主要特点包括:- 所有实例对象共享同一个静态属性的值。- 静态属性可以在类内外使用,且所有实例对象和类都可以访问。- 静态属性可以在类外直接使用,通过类名::$静态属性名的…

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