Я могу использовать основанное на переменной среды местоположение для Spring FileSystemResource?

У меня есть требование, чтобы иметь все наши файлы свойств быть сохраненным в каталоге. Местоположение этого каталога должно быть сохранено в системной переменной. В моем контексте приложения я должен буду получить доступ к этой переменной среды для создания боба FileSystemResource. Вот пример того, что я обычно имел бы:

<bean id="properties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <bean class="org.springframework.core.io.FileSystemResource">
            <constructor-arg>
                <value>myprops.properties</value>
            </constructor-arg>
        </bean>
    </property>
</bean>

Вместо этого у меня должен будет быть он быть чем-то как

<value>${prop_file_location}/myprops.properties</value>

Где расположение файла опоры является переменной среды. Кто-либо знает простой способ сделать это?

Я использую пружину 2.5.6 и java 1.6

12
задан Bozho 3 December 2009 в 18:33
поделиться

3 ответа

ОБНОВЛЕНИЕ

Позже мы обновились до Spring 3.0.X и смогли воспользоваться преимуществами языка выражений Spring. Наш подход упростился с трех компонентов до следующего фрагмента:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
        <value>classpath:defaults.properties</value>
        <value>file:/a/defined/location/project.properties</value>
        <value>file:${AN_ENV_CONFIGURED_DIR}/project.properties</value>
    </list>
  </property>

  <property name="ignoreResourceNotFound" value="true" />
  <property name="searchSystemEnvironment" value="true" />
  <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>

Это позволило нам иметь либо статически хорошо известное местоположение разработки (первые значения по умолчанию), либо местоположение развертывания, настроенное с помощью переменных env. Конфигуратор обрабатывает их по порядку (т.е. развернутое имеет приоритет над настройками по умолчанию).

OLD

В итоге я выбрал непрограммный подход. Я использовал MethodInvoker для получения значения среды. Затем я смог передать это в FileSystemResource.

<bean id="configPath" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" >
    <property name="targetClass" value="java.lang.String" />
    <property name="staticMethod" value="java.lang.System.getenv" />
    <property name="arguments">
        <list>
            <value>NAME_OF_VARIABLE</value>
        </list>
    </property>
</bean>
14
ответ дан 2 December 2019 в 18:54
поделиться

You could always extend the FileSystemResource (i.e. PropertiesFileResource) that would initialize itself by taking prepending the property file location system property to the file path.

1
ответ дан 2 December 2019 в 18:54
поделиться

В Spring.Net у нас есть интерфейс IVariableSource и PropertyPlaceholderConfigurer , которые могут получать значения из переменных среды. Может быть, в Spring Framework для Java есть что-то похожее?

Изменить: Я думаю Я нашел соответствующий java-компонент с именем PropertyPlaceholderConfigurer в java docs .

1
ответ дан 2 December 2019 в 18:54
поделиться
Другие вопросы по тегам:

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