Как Вы настраиваете бобовый контейнер Spring для загрузки файла свойств Java?

Как Вы настраиваете бобовый контейнер Spring (или контекст приложения) для загрузки файла свойств Java?

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

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

Как можно сделать то же использование бобового контейнера Spring?

10
задан Derek Mahar 4 June 2010 в 15:54
поделиться

6 ответов

Справочная документация по 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>
16
ответ дан 3 December 2019 в 14:43
поделиться

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

<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

1
ответ дан 3 December 2019 в 14:43
поделиться

Ваш файл 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

7
ответ дан 3 December 2019 в 14:43
поделиться

Если вы хотите ссылаться на объект как на экземпляр 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, вы можете посмотреть ряд других ответов, описывающих, как это сделать.

1
ответ дан 3 December 2019 в 14:43
поделиться

Есть такая штука, которая называется 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>
2
ответ дан 3 December 2019 в 14:43
поделиться

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

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

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value=classpath:config/applicationConfig.properties"/>
</bean>
5
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: