Подтвердить что ты не робот

Location-location-placeholder из другого имущества

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

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

Подобно этому

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

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

Пол

4b9b3361

Ответ 1

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

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

<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>

Ответ 2

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

<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>