推荐学习!玩转Spring Boot配置文件加载,完全自定义底层实现

文摘   2024-10-29 19:00   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:SpringBoot3.2.5



1. 简介

Spring Boot配置的加载原理基于Spring框架的核心功能,旨在简化配置文件的管理和加载流程。默认情况下,Spring Boot会自动查找并加载名为application.properties或application.yml的文件作为应用程序的主要配置来源,你甚至可以通过spring.config.name来指定自定义的名称。这些文件可以放置在项目的类路径根目录下,或者通过spring.config.location属性指定其位置。

此外,Spring Boot支持Profile特性,允许应用程序根据不同的环境加载特定的配置。开发者可以通过spring.profiles.active属性来激活特定的Profile,并且可以针对每个Profile提供独立的配置文件(如application-dev.properties)。

Spring Boot配置文件的加载主要包含如下3个核心的组件

  • ConfigDataLocationResolver

    该接口用来解析资源文件的位置。

    用于将位置解析为一个或多个资源的策略接口。自定义实现该接口后应该向 spring.factories 中注册。该接口对应的实现构造函数接受以下参数:

    DeferredLogFactory 如果解析器需要延迟的日志记录

    Binder 如果解析器需要从初始的环境获取值

    ResourceLoader 如果解析器需要一个资源加载器

    ConfigurableBootstrapContext:  个可以用来存储可能创建成本较高或需要共享的对象的引导上下文(也可以使用 BootstrapContext 或 BootstrapRegistry)。

     

  • ConfigDataLoader

    用于加载特定 ConfigDataResource 的配置数据(ConfigData)的策略类。自定义实现应该向 spring.factories 注册。该实现的构造函数可以接受如下的参数:

    DeferredLogFactory 如果加载器需要延迟的日志记录

    ConfigurableBootstrapContext:  一个可以用来存储可能创建成本较高或需要共享的对象的引导上下文(也可以使用 BootstrapContext 或 BootstrapRegistry)

  • PropertySourceLoader

    具体加载资源的loader,如:通过将在接口的实现将application.properties配置文件加载并生成对应的PropertySource。

在Spring Boot中默认上面3个接口的实现分别如下:

  • StandardConfigDataLocationResolver

    该实现会生成下面位置的配置文件:【file:./,file:./config/,file:./config/*/,classpath:/,classpath:/config/】。而具体文件名称及后缀是由spring.config.name和PropertySourceLoader#getFileExtensions方法返回值决定。

  • StandardConfigDataLoader

    该实现类会委托具体的PropertySourceLoader加载配置文件。

  • PropertySourceLoader实现

    该实现默认有2个分别是:PropertiesPropertySourceLoaderYamlPropertySourceLoader这会根据你当前环境使用的配置文件后缀来决定使用谁来加载。


在了解完Spring Boot加载配置文件的核心类后,接下来我们将进入到实战自定义配置文件的加载。

2. 实战案例

这部分,我们将通过2个案例来进行讲解。

2.1 加载任意格式的文件

该示例比较的简单,我们期望spring boot从默认的加载位置加载文件时能够加载任意格式的配置文件,也就是说能够加载不同的文件后缀,但是文件名还是默认的文件名(application),即便通过spring.config.name修改也同样能够进行对应的加载。

在上面我们已经了解到了spring boot对具体文件的加载是通过PropertySourceLoader进行加载,所以本示例就通过自定义该接口实现自定义文件格式的加载。

首先,我们先来看下如下的配置

spring:  config:    import:    - info.ini

这里我们希望容器启动时能够加载info.ini,但是实际这将会抛出如下的错误:

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章