8 Stimmen

Wie kann man Werte aus der .properties-Datei in web.xml einfügen?

Ich muss einige Werte aus einer file.properties in die WEB-INF/web.xml etwa so:

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

Damit beschäftige ich mich derzeit:

  • JBoss
  • JEE5

14voto

Ilya Punkte 28356

Sie können diese Klasse hinzufügen, die alle Eigenschaften aus Ihrer Datei zur JVM hinzufügt. Und fügen Sie diese Klasse wie den Kontext-Listener zu 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 in Ihrem Projekt mit

System.getProperty(...)

oder in web.xml

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

3voto

dannyclark Punkte 76

Ein Wort der Vorsicht zu der oben angenommenen Lösung.

Ich habe heute mit jboss 5 damit experimentiert: die contextInitialized() Methode wird erst aufgerufen, nachdem web.xml geladen wird, so dass die Änderung der Systemeigenschaften nicht rechtzeitig wirksam wird. Seltsamerweise bedeutet dies, dass, wenn Sie die Webapp (ohne Neustart von Jboss) neu bereitstellen, die Eigenschaft überlebt, wenn sie beim letzten Mal festgelegt wurde, so dass es zu funktionieren scheint.

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

-1voto

RajV Punkte 6560

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X