Получить Spring Environment как свойства
Интересно, есть ли способ извлечь свойства из среды Spring (например, полученные из ApplicationContext) в виде экземпляра Properties? Или, по крайней мере, есть ли способ перечислить свойства в Spring Environment, или получить их все в виде карты, или каким-либо другим способом я могу превратить [изначально неизвестный] набор свойств в объект Properties?
Мне нужно это для того, чтобы создать jclouds Context
позвонив org.jclouds.ContextBuilder.newBuilder()
а также .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 ищется в указанном списке мест по порядку. Я хотел бы добиться следующего:
- храните список файлов.properties и их возможные местоположения только в этом файле определения XML;
- позволяют размещать связанные свойства jclouds в любом из файлов.properties, упомянутых в XML;
- получить доступ к свойствам, разрешенным и загруженным Spring, в форме объекта Properties, поэтому я могу передать его в jclouds
ContextBuilder
,
Пожалуйста, дайте мне знать, если все это возможно. Заранее спасибо!
-Vlad
2 ответа
Если вы не хотите использовать свойства в конфигурации Spring, вы можете просто использовать:
<context:property-placeholder location="classpath:foo.properties" />
Чтобы получить свойства в вашем коде позже, вы можете просто прочитать этот файл из classpath в объект Properties:
props.load(MyClass.class.getClassLoader().getResourceAsStream("foo.properties"));
В качестве альтернативы вы можете взглянуть на PropertyPlaceholderConfigurer.
ОБНОВИТЬ
Обновляется после замечания Deinum, но только если вы получаете свойства из управляемого бина Spring:
<util:properties id="myProps"
location="classpath:foo.properties"/>
<context:property-placeholder properties-ref="myProps" />
Теперь вы можете внедрить myProps в управляемые bean-компоненты Spring (нет необходимости загружать их снова из пути к классам).
Вы можете использовать PropertiesFactoryBean и сделать что-то вроде этого:
<bean id="jcloudsProps"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location">
<value>your/props/file.properties</value>
</property>
</bean>
Вы можете использовать jcloudsProps
как и любой другой весенний боб.