2013-03-10 8 views
8

Ho questo requisito che la mia webapp deve leggere da un file di proprietà all'esterno della directory webapps di Tomcat, ad esempio da $ CATALINA_HOME/properties/myapp.properties. Ho provato diverse cose ma finora nessuna fortunaCome leggere un file di proprietà all'esterno del contesto webapp in Tomcat

+0

Un file è un file; dargli un percorso e leggerlo. –

+0

Sì, questo è facile da fare. Non è privo di senso, ci sono dei motivi. – Rob

+0

Penso che il file sarà condiviso da più progetti, pubblico una risposta, spero che possa darti un suggerimento. – OQJF

risposta

15

Esistono diversi approcci.

  1. Usa una variabile ambientale
  2. utilizzare un sistema di proprietà
  3. Imposta come un contesto di applicazione Param in Web.xml

Heres un campione, che mostra 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

Grazie! Ho usato il tuo secondo approccio con System Property "catalina.home" Questo è esattamente ciò di cui avevo bisogno! – user2152898

1

Nel nostro progetto che configiamo il percorso del file come argomenti vm che verranno memorizzati nelle proprietà tomcat e nel codice, utilizzare System.getProperty(the parameter you config) per ottenere il percorso e leggere il file delle proprietà , quindi ottieni i risultati.

+0

Sì, ma nel caso Tomcat e se ho bisogno di leggere il file da qualche parte in classe .... implementi ServletContextListener {} Ho ottenuto il percorso relativo WAR! È possibile qualcosa usando, per esempio, SPRING per ottenere un percorso al di fuori di WAR? file: d: /my/path/toFile.log – AnNik

0

Abbiamo messo il percorso della directory webapp-config come segue:

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

dove webapp = nome del file webapp

Ecco il contenuto del file di system-properties-location.properties:

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

Punta a una posizione esterna da cui estrarre le proprietà specifiche dell'ambiente. In questo modo possiamo schierare la stessa guerra in dev, staging e prod senza modificare il contenuto della guerra.

Problemi correlati