java - 使用 Spring 属性加载而不初始化 Spring 上下文
问题描述
我喜欢 Spring 的属性加载机制。您可以定义多个配置文件并使用其他配置文件覆盖或扩展属性,您可以使用不同的文件类型(.properties、XML、JSON,...)来存储您的属性,您可以使用其他属性的值解决自己的价值,aso。
但是要使用这些属性,您必须以某种方式初始化 Spring 上下文(@SpringBootApplication 或 @SpringBootTest)。而且我想在一些库中使用这个属性加载机制,我不能保证上下文被加载(而且我不想加载它)。
所以,我的问题是:
我能否以某种方式创建一个使用 Spring 库加载属性(按需)的类,就像 Spring 加载其属性一样?然后其他类将使用这个类来访问这些属性。无需加载注释。
我一直在寻找这个,但我还没有找到解决方案。
如果是这样就太好了。知道解决方案。
问候,保持健康和圣诞快乐!
解决方案
属性查找机制由接口定义,由接口PropertyResolver
扩展Environment
以支持配置文件,进一步由接口扩展ConfigurableEnvironment
以支持PropertySources
,即通过一组属性源搜索以查找属性的概念。
它由例如 class 实现StandardEnvironment
,它定义了以下属性源:
- 系统属性
- 系统环境变量
以上都是 package 的一部分org.springframework.core.env
,即spring-core-XXX.jar
文件的一部分。
对application.properties
文件的支持由ConfigFileApplicationListener
package中的类添加org.springframework.boot.context.config
。
该类需要一个SpringApplication
in package的实例org.springframework.boot
。
它们是spring-boot-XXX.jar
文件的一部分。
因此,获得基本的 Spring 属性支持很容易,只需创建一个StandardEnvironment
对象。
加载application.properties
文件深深嵌入在 Spring Boot 代码中,如果不初始化 Spring 上下文将很难做到。
推荐阅读
- string - 如何使用`reads`将字符串转换为元组?
- android - 如何在 Android Studio 布局预览中选择我的主题
- dart - 从 Flutter 应用程序向 localhost 发出请求时使用随机端口获取错误消息
- awk - 从多个文件中获取最后 2 行
- c# - 更改 ReportViewer 的 RDLC 报告 - 未为数据源错误提供数据源实例(WFA C#)
- ruby - 在 Lambda 代码中指定触发事件的文件
- python - 使用pickle从列表中解包变量 - Python
- unity3d - 如何在预制件中设置转换变量的目标?
- python - 如何在 Mac 上的终端中退出功能以及如何在终端中打印某些内容?
- reactjs - 找到了 0 个节点 - OnClick