2012-08-23 15 views
8

Ho bisogno di includere alcuni valori da una file.properties nella WEB-INF/web.xml qualcosa di simile:Come includere i valori dal file .properties in web.xml?

<param-name>uploadDirectory</param-name> 
<param-value>myFile.properties['keyForTheValue']</param-value> 

Attualmente sto lavorando con questo:

  • JBoss
  • JEE5
+0

Possibile duplicato di [Uso delle proprietà in web.xml] (http://stackoverflow.com/questions/2948992/using-properties-in-web-xml) – imgx64

risposta

13

Puoi aggiungere questa classe, che aggiunge tutte le proprietà dal tuo file a JVM. E aggiungere questa classe come contesto-ascoltatore a web.xml

public class InitVariables implements ServletContextListener 
{ 

    @Override 
    public void contextDestroyed(final ServletContextEvent event) 
    { 
    } 

    @Override 
    public void contextInitialized(final ServletContextEvent event) 
    { 
     final String props = "/file.properties"; 
     final Properties propsFromFile = new Properties(); 
     try 
     { 
     propsFromFile.load(getClass().getResourceAsStream(props)); 
     } 
     catch (final IOException e) 
     { 
      // can't get resource 
     } 
     for (String prop : propsFromFile.stringPropertyNames()) 
     { 
     if (System.getProperty(prop) == null) 
     { 
      System.setProperty(prop, propsFromFile.getProperty(prop)); 
     } 
     } 
    } 
} 

in web.xml

<listener>  
     <listener-class> 
     com.company.InitVariables 
     </listener-class> 
    </listener> 

ora è possibile ottenere tutte le proprietà in te progetto utilizzando

System.getProperty(...) 

o in web.xml

<param-name>param-name</param-name> 
<param-value>${param-name}</param-value> 
+0

Grazie, questa è la soluzione che stavo cercando – lancha90

+0

I couldn ottenere Jetty per trovare la risorsa utilizzando il percorso relativo e getResourceAsStream ma un percorso assoluto e FileInputStream sembrano funzionare ... +1 per farmi andare nella giusta direzione! – jsh

+0

Non c'è un'utilità per questo? – user447607

3

Una parola di cautela riguardo alla soluzione accettata sopra.

stavo sperimentando con questo su JBoss 5 oggi: il metodo contextInitialized() non viene invocato fino a dopo web.xml è caricato in modo che il cambiamento di proprietà del sistema non ha effetto nel tempo. Stranamente questo significa che se si esegue nuovamente la distribuzione della webapp (senza riavviare jboss) la proprietà sopravviverà dall'ultima volta che è stata distribuita, quindi potrebbe sembrare che funzioni.

La soluzione che andremo a utilizzare è quella di passare i parametri a jboss tramite la riga di comando java, ad es. -Dparameter1=value1 -Dparameter2=value2.

+1

Una soluzione migliore (tuttavia non funziona con jboss 7) consiste nell'utilizzare properties.service.xml. Puoi mappare le proprietà al volo lì. – gebuh

+0

È una buona idea (ed è qui che i nostri amministratori di sistema preferiscono mantenere le proprietà di sistema) ma hai ottenuto che funzioni? Ho provato ad aggiornare il file properties.services.xml sotto 'server/default/deploy' e' server/all/deploy' e, in entrambi i casi, non ha effetto nel web.xml – dannyclark

Problemi correlati