RRZE – Projekte & Prozesse (P&P)

Das Blog der RRZE Stabsstelle "Projekte & Prozesse"

Content

Spring, Maven und Variablen

Das Ziel ist: In der Spring-Konfiguration Platzhalter verwenden, die je nach Maven-Profil anders belegt werden.

pom.xml, hier muss Filterung konfiguriert werden:

  • Properties definieren:
    [xml]
    <properties>
    <location>remote</location>
    </properties>
    [/xml]
  • Ersetzung aktivieren, im build-Baum der POM bzw. des jeweiligen Profils. Dies ersetzt in den spezifizierten Dateien Einträge der Form ${location} durch die entsprechenden Werte:
    [xml]
    <resources>
    <resource>
    <directory>src${file.separator}main${file.separator}resources</directory>
    <filtering>true</filtering>
    <includes>
    <include>**${file.separator}*.xml</include>
    <include>*.xml</include>
    <include>**${file.separator}*.properties</include>
    <include>*.properties</include>
    </includes>
    </resource>
    <resource>
    <directory>src${file.separator}main${file.separator}resources</directory>
    <filtering>false</filtering>
    <excludes>
    <exclude>**${file.separator}*.xml</exclude>
    <exclude>*.xml</exclude>
    <exclude>**${file.separator}*.properties</exclude>
    <exclude>*.properties</exclude>
    </excludes>
    </resource>
    </resources>
    [/xml]

Spring-Konfiguration (applicationContext.xml in WEB-INF/):

  • placeholderConfig definieren:
    [xml]
    <bean id=”placeholderConfig”
    class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
    <property name=”locations”>
    <list>
    <value>classpath:ejb-configuration.properties</value>
    </list>
    </property>
    </bean>
    [/xml]
  • Variable verwenden:
    [xml]
    <jee:jndi-lookup id=”gradschoolManager” jndi-name=”GradschoolManagerBean/${location}”>
    <jee:environment>
    java.naming.factory.initial=org.jboss.naming.NamingContextFactory
    java.naming.provider.url=${java.naming.provider.url}
    java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
    </jee:environment>
    </jee:jndi-lookup>
    [/xml]

Jetzt muss nur noch eine entsprechende Properties-Datei angelegt werden, z.B. unter /src/main/resources:

[xml]
java.naming.provider.url=${java.naming.provider.url}
location=${location}
[/xml]

Wie läuft das ab?

Bei einem Maven-Lauf werden zunächst die Variablen in der Properties-Datei ersetzt. Spring ist so konfiguriert, dass die (ersetzten) Werte aus dieser Datei gelesen und genutzt werden.