2013-07-12 10 views
13

Jak załadować ${catalina.home}/conf/application.properties w aplikacji webowej Spring/Tomcat?

Rozglądanie się po StackOverflow i Google Widzę wiele dyskusji, które twierdzą, że jest to możliwe. Jednak dla mnie to po prostu nie działa. Zgodnie z radą moich badań mój plik Wiosna applicationContext.xml zawiera następujący wiersz:

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

Ale mam to w dziennikach:

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

Z wpisu widzę, że ${catalina.home} rozszerza prawidłowo. Kiedy ręcznie rozszerzam go w pliku applicationContext.xml, zwraca ten sam błąd. Następujący tekst zwraca zawartość pliku application.properties zgodnie z oczekiwaniami:

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

Ścieżka jest zatem poprawna. Czy jest to problem z bezpieczeństwem aplikacji internetowych lub serwera Tomcat?

Odpowiedz

20

location z context:property-placeholder jest zasobów, co oznacza, że ​​jeśli podasz tylko ścieżkę do pliku (w przeciwieństwie do pełnego adresu URL z protokołem), a następnie ścieżka zostanie rozwiązany przed katalogu głównym webapp - próbuje załadować /Users/username/Servers/apache-tomcat-6.0.36/webapps/<appname>/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties, która nie istnieje. Jeśli poprzedzić je file: to będzie działać jak wymagać:

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

@lan w moim przypadku $ {catalina.base} nie jest zastąpiona przez rzeczywista ścieżka – aProgrammer

11

Dla konfiguracji opartej adnotacji można użyć:

@PropertySource("file:${catalina.home}/conf/application.properties") 
Powiązane problemy