2012-05-10 9 views
15

Abbiamo usato per avere un modo per caricare oggetti di un file sul percorso di classe:come utilizzare la proprietà-segnaposto per il file sul filesystem

<context:property-placeholder location="classpath:myConfigFile.properties" /> 

e ha funzionato grande. Ma ora vogliamo caricare le proprietà da un file specifico sul sistema che NON è nel classpath. Volevamo essere in grado di caricare dinamicamente il file, quindi stiamo utilizzando una variabile di ambiente Java per popolarlo. Vi darò un semplice esempio di seguito:

In Java:

System.setProperty("my.prop.file", "/path/to/myConfigFile.properties"); 

In XML Primavera:

<context:property-placeholder location="${my.prop.file}" /> 

ho provato anche in questo modo, grazie ad un'idea di Luciano:

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="${my.prop.file}" /> 
</bean> 

Tutto quello che ho provato è fallito. Non importa cosa ho impostato su my.prop.file su. Greatest hits includono:

<context:property-placeholder location="/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: .path.to.myConfigFile.properties) 

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:.path.to.myConfigFile.properties) 

<context:property-placeholder location="file:///path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:...path.to.myConfigFile.properties) 

come si usa Property segnaposto con una posizione che è sul file system e non sul classpath? Stiamo usando Spring 3.0.5.

Si scopre c'era un problema con lo script che esegue il programma Java che carica il file sorgente. Grazie per l'aiuto. Ho intenzione di chiedere che questa domanda venga cancellata, dato che il codice originale funziona dopotutto. Grazie per il vostro aiuto.

+13

BTW Fortemente in disaccordo w/questo essere chiusa . –

+1

in disaccordo con la chiusura troppo sono venuto qui dopo un po 'googling e descibes la domanda esatta che ho ... –

+1

anche a me -. non capisco il motivo per cui questo è stato chiuso con una categoria "troppo localizzata" la sua sembra abbastanza generale? – monojohnny

risposta

4

Che dire in questo modo?

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="/yourpathandfile" /> 
</bean> 
+0

Posso inserire Variabile d'ambiente Java per value = "/ yourpathandfile"? Darò un colpo. Grazie –

+0

Questo non sembra funzionare. La proprietà viene passata attraverso, ma si verificano gli stessi errori. Grazie per il tuo aiuto, però. Non è possibile? –

+0

Cosa succede se hardcode $ {my.prop.file} con il percorso reale solo per vedere se funziona? – Luciano

14

Questo ha funzionato per me:

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 

Ma questo (è interessante notare) non ha fatto:

<context:property-placeholder location="#{ systemProperties['foo'] }" /> 

ho ottenuto

java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }] 

Tu non stai andando a essere in grado di utilizzare un segnaposto di proprietà ${..} con th Definizione di un PropertyPlaceholderConfigurer. È il pollo prima dell'uovo.

Puoi sempre sottoclasse PropertyPlaceholderConfigurer e l'abbiano in fare quello che vuoi (ad esempio, chiamare setLocations() in un metodo @PostConstruct Poi, invece di utilizzare <context:property-placeholder>, uso:.

<bean class="com.foo.MyPropertyPlaceholderConfigurer"/> 
+0

Ho pensato che il linguaggio delle espressioni consentito per quello, come sostenuto in [questo articolo sulla gestione dei file di proprietà con molla] (http: //www.summa -tech.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring/). Cercherò di capire cosa deve essere sottoclassificato in PropertyPlaceholderConfigurer in modo che possa capire come caricare dinamicamente un file delle proprietà. Sembrava un'idea così semplice e sembra così contorta ora con Spring. –

Problemi correlati