我喜欢 Spring 属性加载机制。事实上,您可以定义多个配置文件并使用其他配置文件覆盖或扩展属性,您可以使用不同的文件类型(.properties、XML、JSON...)来存储您的属性,您可以使用其他属性的值来解决它自己的价值,aso。
但是要使用这些属性,您必须以某种方式初始化 Spring 上下文(@SpringBootApplication 或 @SpringBootTest)。我想在某些库中使用此属性加载机制,在这些库中我无法保证加载上下文(并且我不想加载它)。
所以,我的问题:
我可以以某种方式创建一个使用 Spring 库以与 Spring 加载其属性相同的方式(按需)加载属性的类吗?
然后其他类将使用该类来访问属性。无需加载注释。
我一直在寻找这个问题,但还没有找到解决方案。
如果是这样那就太好了。知道解决方案。
问候,保持健康,圣诞快乐!
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 上下文,这将是非常困难的。
这是一个相当过时的问题,但我最近遇到了类似的问题,并且使用当前版本的 Spring,您只需启动 Spring
Environment
,然后使用 ConfigDataEnvironmentPostProcessor
(取代了现已弃用的 ConfigFileApplicationListener
)即可实现此目的应用与外部配置有关的所有默认后处理。
ConfigurableEnvironment env = new StandardEnvironment();
ConfigDataEnvironmentPostProcessor.applyTo(env);
虽然我没有检查所有功能,但后处理环境正确解析了所有配置文件,考虑到 spring-profiles,正如您通常所期望的那样。