1

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

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

[更新]

要使用的 .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 文件。我想实现以下目标:

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

请让我知道这一切是否可行。先感谢您!

-弗拉德

4

2 回答 2

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(无需从类路径再次加载它们)。

于 2014-12-02T12:05:51.077 回答
0

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

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

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

于 2014-12-02T12:06:58.740 回答