SpringBoot配置加载,各配置文件优先级对比方式

Spring Boot 在启动时会加载多个配置文件,而不同类型的配置文件有不同的优先级。下面将分别介绍 Spring Boot 配置文件的优先级以及如何加载配置文件。

Spring Boot 配置文件的优先级

Spring Boot 支持多种类型的配置文件,这些类型的配置文件按照以下优先级进行加载:

  1. bootstrap.propertiesbootstrap.yml
  2. application.propertiesapplication.yml
  3. 当前环境下的 application-{profile}.propertiesapplication-{profile}.yml。其中,“{profile}”为 Spring Boot 配置文件中定义的激活的 Profile 名称,默认为 default
  4. 其他自定义配置文件,例如 application-test.propertiesapplication-test.yml

以上配置文件中的后面的配置文件会覆盖前面的配置文件中的相同配置选项。

配置文件的加载方式

Spring Boot 支持多种方式加载配置文件,下面将针对不同加载方式进行详细说明:

1. 通过 Environment 对象加载配置文件

可以通过 Environment 对象加载配置文件,示例代码如下:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
        Environment env = context.getEnvironment();
        String property = env.getProperty("spring.datasource.url");
        System.out.println(property);
    }
}

通过 getenv() 方法获取到 Environment 对象之后,可以通过 getProperty() 方法获取指定的配置项的值。在上述示例中获取到了数据库 URL 配置项的值。

2. 通过 @Value 注解注入配置项的值

在 Spring Boot 中,可以使用 @Value 注解将配置项的值注入到类或方法中。示例代码如下:

@Component
public class MyBean {
    @Value("${my.configuration.property}")
    private String myProperty;

    // ...
}

在上述示例中,使用 @Value 注解将 my.configuration.property 配置项的值注入到 myProperty 字段中。在其他使用 MyBean 类的地方,可以通过访问 myProperty 字段获取到该配置项的值。

示例说明

以下两个示例将分别演示 Spring Boot 配置文件的优先级以及配置加载方式的使用。

示例一

假设我们有以下配置文件:

application.properties

spring.datasource.url=jdbc:mysql://localhost:8080/mydatabase
spring.datasource.username=root

application-dev.properties

spring.datasource.url=jdbc:mysql://localhost:8080/mydatabase_dev

在上述示例中,application-dev.properties 配置文件会覆盖 application.properties 配置文件中的 spring.datasource.url 配置项,使其值变为 jdbc:mysql://localhost:8080/mydatabase_dev

示例二

假设我们有以下配置文件:

application.yml

my.configuration.property: Hello World!

我们可以在任意一个类或方法中通过使用 @Value 注解将该配置项的值注入到其中。示例代码如下:

@Component
public class MyBean {
    @Value("${my.configuration.property}")
    private String myProperty;

    public void printMyProperty() {
        System.out.println("My Property Value: " + myProperty);
    }
}

在上述示例中,使用 @Value 注解将 my.configuration.property 配置项的值注入到 myProperty 字段中。在 printMyProperty() 方法中打印了该配置项的值。在其他使用 MyBean 类的地方,可以调用 printMyProperty() 方法获取到该配置项的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot配置加载,各配置文件优先级对比方式 - Python技术站

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

相关文章

  • C++实现LeetCode(86.划分链表)

    C++实现LeetCode(86.划分链表)完整攻略 问题描述 给定一个链表和一个特定值$x$,对于链表中的所有小于$x$的节点,排列在大于或等于$x$的节点之前。同时保留链表节点的初始相对顺序。 例如,给定的链表是1->4->3->2->5->2, 给定的值是$3$。那么,目标答案是1->2->2->4-&g…

    other 2023年6月27日
    00
  • js封装可使用的构造函数继承用法分析

    JS封装可使用的构造函数继承用法分析攻略 在JavaScript中,构造函数继承是一种常见的面向对象编程技术,它允许我们创建一个新的对象,该对象继承了另一个对象的属性和方法。这种继承方式可以通过封装可使用的构造函数来实现。下面是一个详细的攻略,介绍了如何使用构造函数继承。 1. 创建父类构造函数 首先,我们需要创建一个父类构造函数,该构造函数包含要继承的属性…

    other 2023年8月6日
    00
  • 火影忍者究极风暴4只能选择自由对战问题的解决方法

    题目:“火影忍者究极风暴4只能选择自由对战问题的解决方法”攻略 问题描述 在火影忍者究极风暴4游戏中,有些玩家反映只能选择自由对战的问题,无法选择其他游戏模式,如故事模式、生存模式等。这可能是由于游戏版本的问题或是游戏安装时未全部安装导致。那么如何解决这个问题呢?下面提供两种可能的解决方法。 解决方法1:更新游戏补丁 最常见的问题是游戏版本不同步,因此需要更…

    other 2023年6月27日
    00
  • Java动态脚本Groovy获取Bean技巧

    Java动态脚本Groovy获取Bean技巧 在Java中使用Groovy可以轻松地使用动态脚本获取Bean。这里介绍一些Java动态脚本Groovy获取Bean的技巧。 导入Groovy库 Groovy是一种基于JVM的动态脚本语言,所以它可以和Java代码一起运行。为了使用Groovy获取Bean,需要在Java项目中导入Groovy库。 示例代码 @G…

    other 2023年6月27日
    00
  • Win10快捷键有哪些?Win10系统键盘快捷键、组合快捷键大全汇总介绍

    Win10快捷键攻略 Win10系统中有大量的快捷键,这些快捷键可以帮助用户快速地完成各种操作,提高工作效率。本文将介绍Win10体系中常用的快捷键,包括系统键盘快捷键和组合快捷键,并提供实际的示例说明。 系统键盘快捷键 系统键盘快捷键是Win10系统中常见的快捷方式,通过按下键盘上的某些特定键,可以快速地调用一些系统功能和操作。 以下是一些常用的系统键盘快…

    other 2023年6月27日
    00
  • 浏览器提示ActiveX控件交互可能不安全怎么办?

    如果浏览器提示 ActiveX 控件交互可能不安全,很可能是由于浏览器的安全设置过高导致。这种情况下,用户需要调整浏览器的安全设置,以允许 ActiveX 控件的交互。 下面是一些调整浏览器安全设置的步骤: 步骤一:找到浏览器的“Internet选项”设置 不同浏览器内部称呼可能略有不同,但基本都包含“Internet 选项”这个设置项。以 Chrome 浏…

    other 2023年6月27日
    00
  • 使用Python对文件进行批量改名的方法

    当我们需要对大量的文件进行批量改名时,手动一个个修改显然效率太低。下面我们就来介绍如何使用Python对文件进行批量改名的方法。 前置知识 在学习Python进行文件批量改名之前,需要先掌握以下知识: 学会使用Python的 os 模块进行文件操作 学会使用Python的 shutil 模块进行目录操作 学会使用 Python 的正则表达式 re 模块 基础…

    other 2023年6月26日
    00
  • Java实现单向链表反转

    Java实现单向链表反转 1. 题目描述 给你一个单向链表的头节点,将这个链表反转。 例如:原链表为 1 –> 2 –> 3 –> 4,则反转后的链表为 4 –> 3 –> 2 –> 1。 2. 算法思路 我们可以让当前节点的 next 指针指向它前面的节点,由于单向链表没有指向前驱结点的指针,因此我们需要事先…

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