2010-06-01 11 views
9

Ich möchte die Einstellungen in web.xml steuern und verschiedene für verschiedene Umgebungen einmal verwenden.Verwenden von Eigenschaften in web.xml

Ist es möglich, eine Eigenschaft aus einer Eigenschaftendatei für Klassenpfad in web.xml zu verwenden? Etwas wie folgt aus:

<context-param> 
    <param-name>myparam</param-name> 
    <param-value>classpath:mypropertyfile.properties['myproperty']</param-value> 
</context-param> 

Mit freundlichen Grüßen

P

+2

hier ist die Lösung: http://stackoverflow.com/questions/12099008/how-to-include-values-from-properties-file-into-web-xml/12099830#12099830 – lancha90

Antwort

6

Nein. Sie können jedoch die Eigenschaftendatei zur Laufzeit übergeben und von ihr lesen.

Es ist dann trivial, die Eigenschaft zur Laufzeit zu laden, wenn Sie Zugriff auf das Servlet haben.

Properties properties = new Properties(); 
GenericServlet theServlet = ...; 
String propertyFileName = theServlet.getInitParameter("propfile"); 
properties.load(getClass().getClassLoader().getResourceAsStream(propertyFileName)); 
Object myProperty = properties.get("myProperty"); 
+1

Wo sollte meine Datei myprop.properties in der Projektordnerhierarchie sein? – Amruta

+0

Es ist nicht trivial, wenn Sie versuchen, eine Drittanbieterkomponente zu konfigurieren, deren Design Sie nicht steuern. –

2

AFAIK context-param und env-entry sowohl statische Werte zu halten. Sie erhalten den Laufzeit (dynamischen) Wert nicht aus der Eigenschaftendatei. Es wird wie:

<context-param>  
    <param-name>myparam</param-name>  
    <param-value>myactualpropertyvalue</param-value>  
</context-param> 

Jede Änderung des Wert eine Umschichtung des Web-App benötigt.

In Ihrem Beispiel der Wert der String abrufen wäre classpath:mypropertyfile.properties['myproperty']

Wenn Sie Glassfish verwenden Sie es on the fly von Kommandozeilen aktualisieren http://javahowto.blogspot.com/2010/04/glassfish-set-web-env-entry.html

Wenn ich Ihre Anforderung ist bei Kompilierzeit verstehen (dh unterschiedliche Krieg für verschiedene env) und nicht während der Laufzeit?

Sie könnten die Werte in web.xml als Teil des Ameisen/Maven Build-Prozesses ersetzen.

+2

Vielen Dank für Ihre Antwort. Allerdings möchte ich bei der Inbetriebnahme nach der Immobilie suchen. I.e. der gleiche Krieg sollte verschiedene Eigenschaften für verschiedene env haben. Ich bin mir nicht sicher, ob das überhaupt möglich ist. Im Moment tue ich fast wie Sie vorschlagen, ich ersetze den Wert während einer Maven-Build. –

+0

Dies ist informativ ... http://java.sun.com/developer/technicalArticles/xml/WebAppDev4/ – ingyhere

+0

Wie würden Sie diesen Kontext in Ihrem Java-Code nennen? und wo zeigt dir der Klassenpfad? – JesseBoyd

1

Wenn verschiedene Umgebungen ist es sehr wahrscheinlich, dass Sie nicht von einem zum anderen zur Laufzeit Schalt werden, benötigen somit keine Eigenschaften-Datei zu verwenden.

Wenn Sie maven verwenden, können Sie verschiedene Profile für Ihre Umgebungen definieren und den Parameter festlegen, den Sie in jedem Profil ändern möchten.

In Ihrem pom.xml

<profile> 
    <id>env1</id> 
    <properties> 
     <my.param>myParamValue<my.param/> 
    </properties> 
</profile> 

<profile> 
    <id>env2</id> 
    <properties> 
     <my.param>myParamValue2<my.param/> 
    </properties> 
</profile> 

In Ihrem web.xml

<context-param> 
    <param-name>myparam</param-name> 
    <param-value>${my.param}</param-value> 
</context-param> 

Und Descriptor-Filterung in der Bereitstellung konfigurieren in Maven Plugin Krieg

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors> 
    </configuration> 
</plugin> 
Verwandte Themen