使用 Spring 属性加载而不初始化 Spring 上下文

问题描述 投票:0回答:2

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

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

所以,我的问题:
我可以以某种方式创建一个使用 Spring 库以与 Spring 加载其属性相同的方式(按需)加载属性的类吗? 然后其他类将使用该类来访问属性。无需加载注释。

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

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

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

java spring-properties
2个回答
4
投票

属性查找机制由接口

PropertyResolver
定义,通过接口
Environment
扩展以支持profiles,通过接口
ConfigurableEnvironment
进一步扩展以支持
PropertySources
,即搜索的概念一组用于查找房产的房产来源。

它的实施例如按类

StandardEnvironment
,定义属性源:

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

以上都是

org.springframework.core.env
包的一部分,即
spring-core-XXX.jar
文件的一部分。


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

该类需要包 SpringApplication

 中的 
org.springframework.boot
 实例。

它们是

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


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

StandardEnvironment
对象即可。

加载

application.properties
文件深深嵌入到 Spring Boot 代码中,如果不初始化 Spring 上下文,这将是非常困难的。


0
投票

这是一个相当过时的问题,但我最近遇到了类似的问题,并且使用当前版本的 Spring,您只需启动 Spring

Environment
,然后使用
ConfigDataEnvironmentPostProcessor
(取代了现已弃用的
ConfigFileApplicationListener
)即可实现此目的应用与外部配置有关的所有默认后处理。

ConfigurableEnvironment env = new StandardEnvironment();
ConfigDataEnvironmentPostProcessor.applyTo(env);

虽然我没有检查所有功能,但后处理环境正确解析了所有配置文件,考虑到 spring-profiles,正如您通常所期望的那样。

© www.soinside.com 2019 - 2024. All rights reserved.