2013-07-12 11 views
13

Come caricare ${catalina.home}/conf/application.properties in un'applicazione web Spring/Tomcat?

Guardarsi intorno su StackOverflow e Google vedo molte discussioni che affermano che è possibile. Tuttavia, non funziona proprio per me. In linea con il parere dalla mia ricerca mio file Primavera applicationContext.xml contiene la seguente riga:

<context:property-placeholder location="${catalina.home}/conf/application.properties"/> 

Ma io ottenere questo nei log:

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties] 

Dalla voce di registro posso vedere che ${catalina.home} sta espandendo correttamente. Quando lo espongo a mano nel file applicationContext.xml restituisce lo stesso errore. Quanto segue restituisce il contenuto del file application.properties come previsto:

cat /Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties 

Quindi il percorso è chiaramente corretto. Si tratta di una sicurezza Webapp o di un problema di configurazione del server Tomcat?

risposta

20

La location di un context:property-placeholder è un risorse, il che significa che se si fornisce solo un percorso di file (al contrario di un URL completo con un protocollo) quindi il percorso sarà risolto contro la directory di base della webapp - sta cercando di caricare /Users/username/Servers/apache-tomcat-6.0.36/webapps/<appname>/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties, che non esiste. Se si inserisce con file: che funzionerà come desiderato:

<context:property-placeholder location="file:${catalina.home}/conf/application.properties"/> 
+0

@lan nel mio caso $ {} catalina.base non è sostituito da il percorso attuale – aProgrammer

11

Per la configurazione base di annotazione è possibile utilizzare:

@PropertySource("file:${catalina.home}/conf/application.properties") 
Problemi correlati