获取Spring环境作为属性

时间:2014-12-02 11:39:26

标签: java spring spring-environment

我想知道是否有办法以Properties实例的形式从Spring Environment中提取属性(例如从ApplicationContext获取)?或者,至少,有没有办法枚举Spring Environment中的属性,或者将它们全部作为一个映射,或者我可以将[最初未知的]属性集转换为Properties对象的任何其他方式?

我需要这样才能通过调用Contextorg.jclouds.ContextBuilder.newBuilder()来创建jcloud .overrides(Properties)。我们的想法是仅通过.properties文件配置实际的云提供程序,我不想将应用程序逻辑与特定于提供程序的属性结合起来。

[UPDATE]

要使用的.properties文件是使用<context:property-placeholder>配置的,它实际上指定了一个路径列表,如下所示:

< context:property-placeholder location=
    "classpath:/jdbc.properties,
    file:${jboss.server.config.dir}/jdbc.properties,
    file:${catalina.home}/conf/jdbc.properties"
    ignore-resource-not-found="true"/>

表示按顺序在提到的位置列表中搜索.properties文件。我想实现以下目标:

  • 仅保留.properties文件列表及其在此XML定义文件中的可能位置;
  • 允许将jclouds相关属性放在 XML中提到的.properties文件的任何中;
  • 以Properties对象的形式访问由Spring解析和加载的属性,以便我可以将其提供给jclouds ContextBuilder

如果所有这些都可行,请告诉我。提前谢谢!

-Vlad

2 个答案:

答案 0 :(得分:1)

如果您不想在Spring配置中使用属性,那么您只需使用:

<context:property-placeholder location="classpath:foo.properties" />

要在以后获取代码中的属性,只需将此文件从类路径读取到Properties对象中:

props.load(MyClass.class.getClassLoader().getResourceAsStream("foo.properties"));

另外,您可以查看PropertyPlaceholderConfigurer

<强>更新

在Deinum的评论之后更新,但前提是你从Spring托管bean获取属性:

<util:properties id="myProps" 
           location="classpath:foo.properties"/>
<context:property-placeholder properties-ref="myProps" />

现在你可以将myProps注入Spring托管bean(不需要再从类路径加载它们)。

答案 1 :(得分:0)

您可以使用PropertiesFactoryBean并执行以下操作:

<bean id="jcloudsProps" 
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="location">
    <value>your/props/file.properties</value>
  </property>
</bean>

然后您可以像使用任何其他Spring bean一样使用jcloudsProps