【问题标题】:Getting value in .properties file directly from Spring context直接从 Spring 上下文中获取 .properties 文件中的值
【发布时间】:2014-09-29 10:29:24
【问题描述】:

在标准的 Spring 应用程序中,可以定义一个 PropertyPlaceholderConfigurer,它将加载一个或多个属性文件。然后,文件中定义的值将对应用程序的其余部分可见,包括 XML ("${}") 和 Java (@Value)。

有没有办法在加载上下文后从上下文 itef 中获取这样的属性值,就像可以检索 bean (ctx.getBean("bean-name")) 一样?

我尝试了以下方法,但它不起作用:

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:META-INF/spring/spring-context.xml");
ctx.refresh();
ctx.start();
ctx.getEnvironment().getProperty("key-name")); // RETURNS NULL

谢谢

【问题讨论】:

标签: spring


【解决方案1】:

您需要访问BeanFactory

ctx.getBeanFactory().resolveEmbeddedValue("${key-name}");

【讨论】:

  • 不再适用于 Spring 5,遗憾的是,方法不可用,我没有找到替代品。
  • 您可以使用 Environment: env.resolvePlaceholders("${key-name:default-value}") 来注入 Environment,您的类可以实现 EnvironmentAware,或者您可以从 ApplicationContext 获取 Environment,因为它正在扩展 EnvironmentCapable 类。
【解决方案2】:

请参阅此答案,了解一种简单的方法,该方法可以通过将名为 EmbeddedValueResolverAware 的接口添加到您要在其中解析属性值的类来实现。

https://stackoverflow.com/a/16106729/1325237

【讨论】:

  • 这是在 Spring 5 中以简单的方式为我工作的唯一方法,无需包装任何 Spring 类。
【解决方案3】:

可以使用resolvePlaceholders 方法从Environment 检索嵌入变量。请注意,您需要将其包装在${}

ctx.getEnvironment().resolvePlaceholders("${key-name}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多