2012-08-23 10 views
8

Ich brauche einige Werte aus einer file.properties in die WEB-INF/web.xml etwas umfassen:Wie können Werte aus der Datei .properties in web.xml eingefügt werden?

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

Ich bin derzeit mit dieser Arbeit:

  • JBoss
  • JEE5
+0

Mögliches Duplikat von [Eigenschaften in web.xml verwenden] (http://stackoverflow.com/questions/2948992/using-properties-in-web-xml) – imgx64

Antwort

13

Sie können diese Klasse hinzufügen, die JVM alle Eigenschaften aus Ihrer Datei hinzufügt. Und fügen Sie diese Klasse wie kontext Hörer 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> 

jetzt können Sie alle Eigenschaften erhalten in Ihnen

System.getProperty(...) 

oder in web.xml über Projekt

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

Vielen Dank, dies ist die Lösung, die ich suchte – lancha90

+0

Ich konnte nicht Erhalte Jetty nicht, um die Ressource mit relativer Pfadangabe und getResourceAsStream zu finden, aber ein absoluter Pfad und FileInputStream scheinen zu funktionieren ... +1, um mich in die richtige Richtung zu bringen! – jsh

+0

Es gibt kein Dienstprogramm dafür? – user447607

3

Ein Wort der Vorsicht in Bezug auf die oben genannte akzeptierte Lösung.

Ich experimentierte mit dies auf jboss 5 heute: die contextInitialized() Methode wird nicht aufgerufen, bis nach web.xml geladen wird, so dass die Änderung der Systemeigenschaften nicht rechtzeitig wirksam wird. Seltsamerweise bedeutet dies, dass wenn Sie die Webanwendung erneut bereitstellen (ohne jboss neu zu starten), die Eigenschaft von der letzten Einstellung an beibehalten wird, so dass sie scheinbar funktioniert.

Die Lösung, die wir verwenden werden, besteht darin, die Parameter über die Java-Befehlszeile an jboss zu übergeben, z. -Dparameter1=value1 -Dparameter2=value2.

+1

Eine bessere Lösung (funktioniert nicht mit jboss 7) ist die Verwendung von properties.service.xml. Sie können Eigenschaften spontan dort abbilden. – gebuh

+0

Es ist ein guter Gedanke (und das ist, wo unsere Systemadministratoren Systemeigenschaften behalten wollen), aber hast du das zum Funktionieren gebracht? Ich habe versucht, die Datei properties.services.xml unter 'server/default/deploy' und' server/all/deploy' zu aktualisieren und in beiden Fällen wird sie in der Datei web.xml nicht wirksam – dannyclark

Verwandte Themen