2009-08-21 12 views
12

Muszę wczytać niektóre właściwości do kontekstu Spring z lokalizacji, której nie znam, dopóki program nie zostanie uruchomiony.lokalizacja obiektu zastępczego z innej usługi

Więc pomyślałem, że gdybym miał PropertyPlaceholderConfigurer bez lokalizacjach byłoby czytać w my.location od właściwości systemu i wtedy będę mógł wykorzystać tę lokalizację w kontekście: właściciela zastępczy

Jak to

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

ale to nie działa i nie robi location="classpath:${my.location}"

Paul

+0

Nie będzie można połączyć dwóch takich samych elementów - to BeanFactoryPostProcessors, które nie mogą przetwarzać się nawzajem, jeśli widzisz, co mam na myśli. – skaffman

+0

tak, doszedłem do wniosku, że moim problemem było coś takiego: –

+0

Właściwie to pachnie jak ulepszenie do PropertyPlaceHolderConfigurer, które może być warte złożenia wniosku o funkcję w Spring JIRA. – skaffman

Odpowiedz

5

Problem polega na tym, że próbujesz skonfigurować właściciela miejsca własności, używając składni zastępczej właściwości :) To trochę sytuacja z kurczakiem i jajkiem - wiosna nie może rozwiązać Twojego obiektu zastępczego ${my.location}, dopóki nie zostanie skonfigurowany obiekt zastępczy właściwości.

To nie jest zadowalająca, ale można bodge go za pomocą bardziej wyraźny składnię:

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

niezadowalające, ale przynajmniej może działać –

+0

Nie działa dla mnie przy użyciu Spring 3.1.3: 'org.springframework.beans.NotWritablePropertyException: Niepoprawna właściwość 'location' klasy bean [org.springframework.beans.factory.config .PropertyPlaceholderConfigurer]: właściwość "lokalizacja" komórki nie jest zapisywalna lub ma nieprawidłową metodę ustawiającą. Czy typ parametru setera odpowiada typowi powrotu gettera? ' –

15

Można to zrobić z nieco innego podejścia. Oto, jak to konfigurujemy. Ładuję domyślne właściwości, a następnie nadpisuję je właściwościami z konfigurowalnej lokalizacji. Działa to bardzo dobrze dla mnie.

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

+1 - Zrobiłem to. Działa dobrze. –

Powiązane problemy