расположение объекта-заполнителя из другого объекта - PullRequest
12 голосов
/ 21 августа 2009

Мне нужно загрузить некоторые свойства в контекст Spring из места, которое я не знаю, пока не запустится программа.

Поэтому я подумал, что если бы у меня был PropertyPlaceholderConfigurer без местоположений, он бы прочитал в my.location из системных свойств, а затем я мог бы использовать это местоположение в контексте: свойство-заполнитель

Как это

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>    
<context:property-placeholder location="${my.location}"/>

но это не работает и не location="classpath:${my.location}"

Пол

Ответы [ 2 ]

15 голосов
/ 21 августа 2009

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

<bean id="propertyPlaceholderConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="locations">
            <list>
                <value>classpath:site/properties/default/placeholder.properties
                </value>
                <value>classpath:site/properties/${env.name}/placeholder.properties
                </value>
            </list>
        </property>
    </bean>
5 голосов
/ 21 августа 2009

Проблема здесь заключается в том, что вы пытаетесь настроить заполнитель свойства с использованием синтаксиса заполнителя свойства :) Это немного сложная ситуация - Spring не может разрешить ваш заполнитель ${my.location}, пока он не настроит свойство-заполнитель.

Это неудовлетворительно, но вы можете использовать его в более явном синтаксисе:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
   <property name="location">
      <bean class="java.lang.System" factory-method="getenv">
         <constructor-arg value="my.location"/>
      </bean>
   </property>
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...