2013-03-10 11 views
8

Mam to wymaganie, aby moja aplikacja internetowa musiała odczytać plik właściwości spoza katalogu webapps Tomcat, na przykład z $ CATALINA_HOME/properties/myapp.properties. Próbowałem kilka rzeczy, ale jak dotąd bez powodzeniaJak odczytać plik właściwości poza kontekstem mojej aplikacji webowej w Tomcat

+0

Plik jest plikiem; daj mu ścieżkę i przeczytaj. –

+0

Tak, to jest łatwe do zrobienia. To nie jest bezsensowne, istnieją ku temu powody. – Rob

+0

Myślę, że plik zostanie udostępniony przez wiele projektów, zamieszczam odpowiedź, mam nadzieję, że da ci to wskazówkę. – OQJF

Odpowiedz

15

Istnieje wiele podejść.

  1. użycie zmiennej środowiska
  2. wykorzystują system Property
  3. ustawić go jako kontekst aplikacji Param w web.xml

Herezje próbka, która pokazuje Option 1 and Option 2

try { 

    //Use Any Environmental Variable , here i have used CATALINA_HOME 
    String propertyHome = System.getenv("CATALINA_HOME");   
    if(null == propertyHome){ 

     //This is a system property that is passed 
     // using the -D option in the Tomcat startup script 
     propertyHome = System.getProperty("PROPERTY_HOME"); 
    } 


    String filePath= propertyHome+"/properties/myapp.properties"; 

    Properties property = new Properties();   
    property.load(SystemTest.class.getClassLoader().getResourceAsStream(filePath)); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

Dziękujemy! Użyłem twojego drugiego podejścia z System Property "catalina.home" Dokładnie tego potrzebowałem! – user2152898

1

W naszym projekcie, że config ścieżkę pliku jako vm argumenty, które będą przechowywane we właściwościach Tomcat i kod, wykorzystać System.getProperty(the parameter you config) uzyskać ścieżkę i odczytać plik właściwości , a następnie uzyskaj wyniki.

+0

Tak, ale na wypadek, gdyby Tomcat i jeśli potrzebuję czytać plik gdzieś w klasie .... implementuje ServletContextListener {} Mam ścieżkę powiązaną z WAR! Czy jest możliwe, że coś używa np. SPRING, aby uzyskać ścieżkę poza WAR? file: d: /my/path/toFile.log – AnNik

0

Włożyliśmy ścieżkę katalogu webapp-config następująco:

/var/lib/tomcat7/webapps/webapp/WEB-INF/classes/system-properties-location.properties

gdzie webapp = nazwa pliku webapp

Oto treść system-properties-location.properties pliku:

lokalizacji =/var/lib/tomcat7/webapp-configs/webapp

Wskazuje lokalizację zewnętrzną, z której będą pobierane określone właściwości środowiska. W ten sposób możemy wdrożyć tę samą wojnę w dev, inscenizację i prod bez modyfikacji zawartości wojennej.