Mein Problem ist folgendes:
Ich habe server.properties
für unterschiedliche Umgebungen. Der Pfad zu diesen Eigenschaften wird über eine Systemeigenschaft namens propertyPath
. Wie kann ich meine Mitarbeiter anweisen applicationContext.xml
zum Laden der Eigenschaften mit dem angegebenen propertyPath
Systemeigenschaft ohne hässliche MethodInvokingBean
die aufruft System.getProperty('');
Meine applicationContext.xml
<bean id="systemPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="placeholderPrefix" value="sys{"/>
<property name="properties">
<props>
<prop key="propertyPath">/default/path/to/server.properties</prop>
</props>
</property>
</bean>
<bean id="propertyResource" class="org.springframework.core.io.FileSystemResource" dependency-check="all" depends-on="systemPropertyConfigurer">
<constructor-arg value="sys{propertyPath}"/>
</bean>
<bean id="serviceProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" ref="propertyResource"/>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" ref="propertyResource"/>
<property name="placeholderPrefix" value="prop{"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="ignoreResourceNotFound" value="false"/>
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="prop{datasource.name}"/>
</bean>
Bei dieser Konfiguration beschwert sich die PropertyResource auch immer über
java.io.FileNotFoundException: sys{propertyPath} (The system cannot find the file specified)
Irgendwelche Vorschläge? ;-) Danke Gabe
EDIT:
Jetzt habe ich den Ladeprozess der Beans debuggt und es scheint, dass die setLocation
Methode der propertyConfigurer
aufgerufen wird, bevor die systemPropertyConfigurer
erstellt wird, so dass die propertyResource mit "sys{propertyPath}" initialisiert wird. Ich habe herumgespielt mit depends-on
aber kein Glück.
0 Stimmen
Wie genau haben Sie mit depends-on gespielt?
0 Stimmen
PropertyResource depends-on="systemPropertyConfigurer"' scheint keine Auswirkung zu haben. propertyResource wird trotzdem zuerst initialisiert, vielleicht weil es mit dem Konstruktor-Arg initialisiert wird