2014-11-06 16 views
5

Quindi questo deve essere un errore stupido, che non ho potuto passare. Sto cercando di esternalizzare il mio file delle proprietà, attualmente posizionato nella mia home dell'utente. Sto caricando le proprietà del file utilizzando @PropertySource come questo:Spring PropertyPlaceHolder File di proprietà esterne Java Config

@Configuration 
@PropertySources(value = { @PropertySource("file:#{systemProperties['user.home']}/.invoice/config.properties") }) 
public class PropertiesConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertiesPlaceHolderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

Ma, purtroppo, questo non sta caricando il file delle proprietà. Genera FileNotFoundException. Ma se cambio il percorso:

@PropertySources(value = { @PropertySource("file:/home/rohit/.invoice/config.properties") }) 

funziona correttamente. E questo è il percorso su cui il percorso precedente si risolve. L'ho registrato per verificare. Quindi mi sembra che SpEL non venga valutato nell'annotazione @PropertySource. Dovrebbe funzionare in questo modo?

Se sì, c'è un altro modo per leggere il file delle proprietà esterne, che si trova in /home/rohit? Non voglio dare un percorso assoluto, per ovvi motivi. E vorrei evitare di estendere la classe PropertyPlaceHolderConfigurer.

Un'altra opzione che ho provato è stata l'aggiunta della cartella /home/rohit/.invoice a tomcat classpath. Ma sembra che Spring non usi System Classpath per risolvere il suffisso classpath:. Qualche suggerimento su questo?

+1

L'espressione non funziona utilizzando 'file: $ {user.home} /. Invoice/config.properties'. –

+0

@ M.Deinum Fammi provare .. –

+0

@ M.Deinum Ahaa !! Ha funzionato :) Post che come risposta, quindi posso accettarlo :) –

risposta

3

In un'iscrizione @PropertySoure, le espressioni EL non funzioneranno. È consentito utilizzare i segnaposti ${...}, ma è anche limitato alle variabili di sistema o di ambiente. Tuttavia, poiché si desidera risolvere la home directory dell'utente, è possibile utilizzare il segnaposto ${user.home}.

@PropertySource("file:${user.home}/.invoice/config.properties") 

Questo dovrebbe funzionare come desiderato.

Problemi correlati