Использование контекста: расположение свойства-заполнителя в Spring EL - PullRequest
3 голосов
/ 01 августа 2011

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

Сначала я попробовал следующее:

<context:property-placeholder location="classpath:environment_common.properties,classpath:environment_${app_env}.properties" />

Я проверил, что системное свойство (app_env) установлено правильно (например, "bar"), но Spring загружает неправильный файл (например, environment_foo.properties).

Я пытался использовать SpEL следующим образом:

<context:property-placeholder
        location="#{ 'classpath:environment_common.properties,classpath:environment_'.concat(systemProperties['app_env'] }.properties) }" />

Но похоже, что context:property-placeholder не поддерживает SpEL:

java.io.FileNotFoundException: Could not open ServletContext resource [/#{'classpath:environment_common.properties]

Похоже, что context:property-placeholder имеет собственный синтаксический анализатор, который ищет запятые для разграничения нескольких файлов свойств, но не сначала передает значение в SpEL для его оценки.

Как мне использовать context:property-placeholder, или я должен просто обойти его и использовать PropertyPlaceHolderConfigurer напрямую?

Ответы [ 2 ]

1 голос
/ 02 августа 2012

Я столкнулся с этой проблемой сегодня.Вот мое решение:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" 
        value="classpath:#{(T(java.lang.System).getProperty('my.property', 'development.properties'))}"/>
</bean> 

Я не использовал предопределенную переменную systemProperties, но думаю, что вы могли бы, если хотите.

1 голос
/ 05 августа 2011

Я никогда не пытался использовать SpEL напрямую в элементе свойства-заполнителя.Похоже, ошибка подана для него.Как довольно простой обходной путь:

<context:property-placeholder properties-ref="props" />
<util:properties id="props" location="#{ your expression here }"/>
...