2009-08-21 4 views
12

Ich muss einige Eigenschaften in einen Spring-Kontext von einem Ort, den ich nicht weiß, bis das Programm ausgeführt wird.property-placeholder location von einer anderen Eigenschaft

Also dachte ich, dass wenn ich einen PropertyPlaceholderConfigurer ohne Standorte habe es in my.location von den Systemeigenschaften lesen würde und dann konnte ich diesen Ort in einem Kontext verwenden: Immobilien-Platzhalter

Like this

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

aber das funktioniert nicht, und auch nicht location="classpath:${my.location}"

Paul

+0

Sie werden nicht in der Lage sein, zwei Platzhalter so zu kombinieren - sie sind BeanFactoryPostProcessors, die sich nicht gegenseitig verarbeiten können, wenn Sie sehen, was ich meine. – skaffman

+0

ja, ich dachte mein Problem war etwas in dieser Richtung –

+0

Eigentlich riecht das wie eine Erweiterung zu PropertyPlaceHolderConfigurer, die es wert sein könnte, als Feature Request in der Spring JIRA zu archivieren. – skaffman

Antwort

5

Das Problem hier ist, dass Sie versuchen, eine Eigenschaft Platzhalter mit Eigenschaft Platzhalter Syntax zu konfigurieren :) Es ist ein bisschen eine Hühner-und-Ei-Situation - Frühling kann Ihren ${my.location} Platzhalter nicht auflösen, bis es den Eigenschaft-Platzhalter konfiguriert ist.

Dies ist nicht zufriedenstellend, aber man kann es bodge durch explizitere Syntax:

<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

nicht zufriedenstellend, aber zumindest könnte es funktionieren –

+0

Funktioniert nicht für mich mit Spring 3.1.3: 'org.springframework.beans.NotWritablePropertyException: Ungültige Eigenschaft 'Speicherort' der Bean-Klasse [org.springframework.beans.factory.config .PropertyPlaceholderConfigurer]: Bean-Eigenschaft 'location' ist nicht beschreibbar oder hat eine ungültige Setter-Methode. Stimmt der Parametertyp des Setter mit dem Rückgabetyp des Getters überein? ' –

15

Sie diese mit einem etwas anderen Ansatz zu tun. Hier ist, wie wir es konfigurieren. Ich lade Standardeigenschaften und übergehe sie dann mit Eigenschaften von einem konfigurierbaren Ort. Das funktioniert sehr gut für mich.

<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 - das habe ich gemacht. Funktioniert gut. –

Verwandte Themen