SpringBoot自定义加载yml实现方式,附源码解读

首先我们需要了解在SpringBoot中如何读取配置文件。SpringBoot 支持的主配置文件类型有两种: .properties.yml 文件格式。在默认情况下,SpringBoot 会优先读取 .properties 文件,如果同时存在两种格式,.yml 文件会覆盖.properties 文件。

然而,有些时候我们需要动态加载一些配置文件,而这些配置文件的名字不能事先确定,这时候我们就需要使用自定义加载配置文件的方式了。下面是示例代码:

实现方式:利用自定义ApplicationContextInitializer来实现yml文件读取

public class MyApplicationContextInitializer implements ApplicationContextInitializer {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
        Resource resource = new FileSystemResource("D:/application.yml");
        try {
            PropertySource<?> propertySource = loader.load("customize-yaml", resource).get(0);
            applicationContext.getEnvironment().getPropertySources().addFirst(propertySource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这里我们实现了一个 MyApplicationContextInitializer 类,它实现了 ApplicationContextInitializer 接口。通过实现 initialize 方法,我们可以实现在 SpringBoot 启动时加载一个我们自定义的 .yml 文件。

配置类

@SpringBootApplication
@Import(MyApplicationContextInitializer.class)
public class CustomizedApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(CustomizedApplication.class);
        app.run(args);
    }
}

这里我们通过在入口类上加 @Import 注解,将 MyApplicationContextInitializer 类导入,从而实现了自定义加载 .yml 文件的功能。

示例1

首先我们创建一个名为 application.yml 的文件,内容如下:

spring:
  profiles:
    active: dev
---
spring:
  profiles: dev
  server:
    port: 8888

其中我们指定了使用 dev 配置,端口号为 8888

当我们启动应用时,输出日志会显示:

Tomcat started on port(s): 8888 (http)

这说明我们成功读取了自定义的 .yml 文件。可以通过Postman等工具来验证真的能成功访问端口号为 8888\health端点。

示例2

现在我们将 application.yml 文件更名为 test.yml,修改其中端口号为 9999,新建一个空的 application.yml 文件。我们这里演示如何动态加载 test.yml 文件。

我们需要在应用启动时传递一个参数,即指定要加载的 .yml 文件。在 CustomizedApplication 类的 main 方法中加上以下代码:app.setDefaultProperties(Collections.singletonMap("spring.config.name", "test"));

这里我们使用 spring.config.name 属性来指定需要加载的 test.yml 文件,到这里我们便实现了动态加载 test.yml 文件的功能。

完整代码如下所示:

public class MyApplicationContextInitializer implements ApplicationContextInitializer {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
        Resource resource = new FileSystemResource("D:/" + applicationContext.getEnvironment().getProperty("spring.config.name") + ".yml");
        try {
            PropertySource<?> propertySource = loader.load("customize-yaml", resource).get(0);
            applicationContext.getEnvironment().getPropertySources().addFirst(propertySource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
@SpringBootApplication
@Import(MyApplicationContextInitializer.class)
public class CustomizedApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(CustomizedApplication.class);
        app.setDefaultProperties(Collections.singletonMap("spring.config.name", "test"));
        app.run(args);
    }
}

这就是自定义加载 .yml 文件的方法,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot自定义加载yml实现方式,附源码解读 - Python技术站

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

相关文章

  • 你可能真没用过这些 IDEA 插件(建议收藏)

    当提到Java开发的工具中,IntelliJ IDEA是无疑是许多开发者首选的IDE。除了强大的功能之外,IDE在安装插件后可以帮助我们更快速的开发,提高工作效率。在本篇攻略中,我将介绍一些我平常在IDEA中常用的插件,并提供一些示例。 一、安装插件 安装插件非常简单,只需要打开IDEA选项,然后点击插件,再找到Marketplace页面,在这里面你能找到很…

    Java 2023年5月26日
    00
  • 如何运行SpringBoot项目的方法

    如何运行Spring Boot项目的方法 Spring Boot是一个非常流行的Java开发框架,它提供了多种运行方式,包括命令行、Maven插件、Gradle插件等。本文将详细介绍如何运行Spring Boot项目的方法,包括命令行、Maven插件、Gradle插件等。 1. 命令行 使用命令行运行Spring Boot项目是最简单的方法。我们只需要在项目…

    Java 2023年5月14日
    00
  • 零基础写Java知乎爬虫之先拿百度首页练练手

    以下是零基础写Java知乎爬虫之先拿百度首页练练手的完整攻略: 步骤一:准备工作 首先,我们需要安装Java开发环境(JDK),推荐使用Oracle JDK。然后,我们需要安装一个Java代码编辑器,比如Eclipse、IntelliJ IDEA等。接着,我们需要导入一个Java爬虫框架——Jsoup。 步骤二:编写Java代码 编写Java代码的过程分为以…

    Java 2023年5月26日
    00
  • java发送kafka事务消息的实现方法

    Java发送Kafka事务消息的实现方法可以分为以下步骤: 步骤一:配置事务环境 配置Kafka事务环境需要设置事务ID和Kafka事务的属性。以下是示例代码: Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092&…

    Java 2023年5月20日
    00
  • Java将科学计数法数据转为字符串的实例

    下面是Java将科学计数法数据转为字符串的实例的完整攻略。 什么是科学计数法? 科学计数法是一种用于较大或较小数字表示的方法,也称为指数计数法。在科学计数法中,数字首先被写成一个在1到10之间的数字(称为尾数),然后将这个数字乘以10的乘方来获得原数字。 例如:1.23 × 10^4,其中1.23是尾数,4是指数。在Java中,双精度浮点数和单精度浮点数默认…

    Java 2023年5月27日
    00
  • java 将字符串追加到文件已有内容后面的操作

    将字符串追加到文件已有内容后面是一个常见的操作,实现这个操作涉及到Java中的文件操作、字符编码、IO流等多个概念和技术。 以下是一份完整的攻略,介绍如何实现在Java中将字符串追加到文件已有内容后面。 第一步:打开文件并读取其内容 使用File类和FileReader类可以打开一个文件并读取其内容。需要注意,FileReader类是以字符为单位读取文件内容…

    Java 2023年5月27日
    00
  • 比较详细的关于javascript 解析json的代码

    当我们获取到JSON格式的数据时,需要将其解析为JavaScript对象才能够方便地操作和使用其数据。下面详细解析一下JavaScript如何解析JSON格式的数据。 1. JSON的基本结构 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,但是独立于编程语言。 JSON的基…

    Java 2023年5月26日
    00
  • 28基于java的简单酒店数据管理

    本文章介绍一个基于java的简单酒店数据管理系统 项目介绍 该项目适用于初学java后,需要一个小练手的java web项目,该项目是只有一个酒店数据表,然后实现对该酒店增加,修改,删除和分页查询的小案例,虽然项目不是很复杂,但麻雀虽小但五脏俱全,适合于个人学习适用。 项目使用的技术架构 后端:java+SpringBoot + MyBatis-Plus数据…

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