【问题标题】:Use Spring properties loading without initializing the Spring context使用 Spring 属性加载而不初始化 Spring 上下文
【发布时间】:2020-12-23 12:04:34
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 如果你能给我们一些类,它会被加载到使用它的地方会更好。

标签: java spring-properties


【解决方案1】:

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

它被实现,例如按类StandardEnvironment,它定义了属性源:

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

以上所有内容都是包org.springframework.core.env的一部分,即spring-core-XXX.jar文件的一部分。


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

该类需要SpringApplicationorg.springframework.boot 中的实例。

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


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 2012-07-08
    • 2017-03-17
    • 2014-09-13
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多