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

Я перемещаю свойства из моего конфигурационного файла Spring в отдельный файл свойств. Это входит в конфигурационный файл с

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" value="file:properties/${CONFIG_MODE}/service.properties" />
</bean>

В соответствии с этим местоположение файла свойств относится к текущему рабочему каталогу серверного процесса.

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

Я хотел бы ссылаться на файл свойств, используя путь относительно каталога, содержащего файл конфигурации.

Глядя на FileSystemResource, кажется createRelative может быть то, что мне нужно, но я не могу понять, как его использовать в конфигурационном файле.

Спасибо,

Стив

Ответ 1

Я не знаю, как это сделать.

Однако вы можете загрузить файл свойств из пути к классам:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" value="classpath:path/to/service.properties" />
</bean>

Расположение пути к папке вашего файла свойств является гораздо более предсказуемой ситуацией, и оно будет работать до тех пор, пока ваш путь к классам настроен правильно.

Ответ 2

Используя 3.1, вы можете сохранить файлы с пути к классам, если хотите.

С помощью следующего определения bean

<bean class=
    "org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" 
    value="file:${props.path}/service.properties" />
</bean>

вы можете установить свойство с помощью командной строки java

java ... -Dprops.path=path/to/where/it/is

Ответ 3

Предположим, что вы разместили файл config.properties внутри WEB-INF Тогда:

<bean id="propertyConfigurerInternal"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
    <value>classpath:../config.properties</value>
</property>