我想知道是否有办法以Properties实例的形式从Spring Environment中提取属性(例如从ApplicationContext获取)?或者,至少,有没有办法枚举Spring Environment中的属性,或者将它们全部作为一个映射,或者我可以将[最初未知的]属性集转换为Properties对象的任何其他方式?
我需要这样才能通过调用Context
和org.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文件。我想实现以下目标:
ContextBuilder
。如果所有这些都可行,请告诉我。提前谢谢!
-Vlad
答案 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
。