Как настроить контейнер bean-компонента Spring для загрузки файла свойств Java? - PullRequest
10 голосов
/ 04 июня 2010

Как настроить контейнер bean-компонента Spring (или контекст приложения) для загрузки файла свойств Java?

JavaWorld статья Интеллектуальная загрузка ваших свойств объясняет, как загрузить файлы свойств из пути к классам, используя один из следующих методов обработки ресурсов в стандартной библиотеке Java:

ClassLoader.getResourceAsStream ("some/pkg/resource.properties");
Class.getResourceAsStream ("/some/pkg/resource.properties");
ResourceBundle.getBundle ("some.pkg.resource");

Как вы можете сделать то же самое, используя контейнер bean-компонента Spring?

Ответы [ 6 ]

16 голосов
/ 04 июня 2010

Справочная документация Spring Framework (2.5.x) содержит два примера загрузки файла свойств в контейнер компонента: один перед выпуском версии 2.5 и более краткий способ использования <util:properties/> функция, представленная в версии 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:properties/> необходимо объявить пространство имен util и расположение схемы в преамбуле в верхней части конфигурационного файла Spring XML:

<?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>
7 голосов
/ 04 июня 2010

Ваш 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

5 голосов
/ 04 июня 2010

Например, через PropertiesFactoryBean . Используйте PropertyPlaceholderConfigurer для настройки компонентов в контексте через свойства.

Вы найдете примеры PropertyPlaceholderConfigurer в других ответах. Вот пример PropertiesFactoryBean:

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value=classpath:config/applicationConfig.properties"/>
</bean>
2 голосов
/ 04 июня 2010

Есть такая вещь, которая называется 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>
1 голос
/ 04 июня 2010

Если вы хотите сослаться на объект как экземпляр 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>

Это позволяет вам ссылаться на bean-компонент Spring properties как экземпляр java.util.Properties. Вы даже можете объединить несколько файлов свойств, добавив дополнительные значения в location. См. Это описание строк ресурсов для получения информации о том, какие типы значений Spring будет принимать для местоположения. Если вы хотите использовать подстановки в стиле ${} в Spring XML, вы можете увидеть множество других ответов, описывающих, как это сделать.

1 голос
/ 04 июня 2010

Мы используем это:

<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>

, что позволяет указанным там свойствам использоваться в качестве ссылок в файлах конфигурации

Подробнее см .:

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

...