首页 > 解决方案 > 使用 Spring 属性加载而不初始化 Spring 上下文

问题描述

我喜欢 Spring 的属性加载机制。您可以定义多个配置文件并使用其他配置文件覆盖或扩展属性,您可以使用不同的文件类型(.properties、XML、JSON,...)来存储您的属性,您可以使用其他属性的值解决自己的价值,aso。

但是要使用这些属性,您必须以某种方式初始化 Spring 上下文(@SpringBootApplication 或 @SpringBootTest)。而且我想在一些库中使用这个属性加载机制,我不能保证上下文被加载(而且我不想加载它)。

所以,我的问题是:
我能否以某种方式创建一个使用 Spring 库加载属性(按需)的类,就像 Spring 加载其属性一样?然后其他类将使用这个类来访问这些属性。无需加载注释。

我一直在寻找这个,但我还没有找到解决方案。

如果是这样就太好了。知道解决方案。

问候,保持健康和圣诞快乐!

标签: javaspring-properties

解决方案


属性查找机制由接口定义,由接口PropertyResolver扩展Environment以支持配置文件,进一步由接口扩展ConfigurableEnvironment以支持PropertySources,即通过一组属性源搜索以查找属性的概念。

它由例如 class 实现StandardEnvironment,它定义了以下属性源:

  • 系统属性
  • 系统环境变量

以上都是 package 的一部分org.springframework.core.env,即spring-core-XXX.jar文件的一部分。


application.properties文件的支持由ConfigFileApplicationListenerpackage中的类添加org.springframework.boot.context.config

该类需要一个SpringApplicationin package的实例org.springframework.boot

它们是spring-boot-XXX.jar文件的一部分。


因此,获得基本的 Spring 属性支持很容易,只需创建一个StandardEnvironment对象。

加载application.properties文件深深嵌入在 Spring Boot 代码中,如果不初始化 Spring 上下文将很难做到。


推荐阅读