Как Вы настраиваете бобовый контейнер Spring (или контекст приложения) для загрузки файла свойств Java?
Статья JavaWorld Энергично Загружается, Ваши Свойства объясняет, как загрузить файлы свойств из пути к классу с помощью одного из следующих методов обработки ресурса в стандартной библиотеке Java:
ClassLoader.getResourceAsStream ("some/pkg/resource.properties");
Class.getResourceAsStream ("/some/pkg/resource.properties");
ResourceBundle.getBundle ("some.pkg.resource");
Как можно сделать то же использование бобового контейнера Spring?
Справочная документация по Spring Framework (2.5.x) дает два примера загрузки файл свойств в контейнер bean-компонентов, один до выпуска версии 2.5 и более краткий способ использования функции
, которая была представлена в версии 2.5:
До версии 2.5:
<!-- creates a java.util.Properties instance with values loaded from the supplied location -->
<bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:com/foo/jdbc-production.properties"/>
</bean>
После версии 2.5:
<!-- creates a java.util.Properties instance with values loaded from the supplied location -->
<util:properties id="jdbcConfiguration" location="classpath:com/foo/jdbc-production.properties"/>
Обратите внимание, что для использования
вы должны объявить пространство имен util
и расположение схемы в преамбуле вверху ваш XML-файл конфигурации Spring:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<!-- <bean/> definitions here -->
</beans>
Мы используем это:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="locations">
<value>classpath:test.properties</value>
</property>
</bean>
Что позволяет использовать определенные там свойства в качестве ссылок в файлах конфигурации
Для получения дополнительной информации см .:
Ваш файл beans.xml
должен иметь PropertyPlaceholderConfigurer
:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:some/pkg/resource.properties</value>
</list>
</property>
<!-- Default values for backwards compatibility -->
<property name="properties">
<props>
<prop key="name">value</prop>
</props>
</property>
</bean>
И затем вы можете ссылаться на свойства как таковые в другом месте в beans.xml
:
<bean class="${blah}">
....
<bean>
Чтобы прочитать статью об этом, посетите http://almaer.com/blog/spring-propertyplaceholderconfigurer-a-nice-clean-way-to-share
Если вы хотите ссылаться на объект как на экземпляр java.util.Properties
, вам следует сделать следующее:
<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound"><value>true</value></property>
<property name="locations">
<list>
<value>classpath:property-file.properties</value>
</list>
</property>
</bean>
Это позволит вам ссылаться на Spring bean properties
как на экземпляр java.util.Properties
. Вы даже можете заставить его объединить несколько файлов свойств, добавив больше значений в location
. Смотрите описание resource strings для получения информации о том, какие типы значений Spring будет принимать для location. Если вы хотите использовать подстановки в стиле ${}
в XML Spring, вы можете посмотреть ряд других ответов, описывающих, как это сделать.
Есть такая штука, которая называется PropertyPlaceholderConfigurer, вы можете использовать ее для внедрения ваших bean-компонентов со значениями из файла свойств, например:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:com/foo/jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
Например, через PropertiesFactoryBean . Используйте PropertyPlaceholderConfigurer для настройки bean-компонентов в контексте через свойства.
Вы найдете примеры PropertyPlaceholderConfigurer в других ответах. Вот пример PropertiesFactoryBean:
<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value=classpath:config/applicationConfig.properties"/>
</bean>