RRZE – Projekte & Prozesse (P&P)

Suche


12.10.2010

Spring, Maven und Variablen

Peter Reiß, 15:45 Uhr in PPSA; Tags:

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:
    <properties>
    <location>remote</location>
    </properties>
    
  • 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:
    <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>
    

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

  • placeholderConfig definieren:
    <bean id="placeholderConfig"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
        <list>
          <value>classpath:ejb-configuration.properties</value>
        </list>
      </property>
    </bean>
    
  • Variable verwenden:
    <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>
    

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

java.naming.provider.url=${java.naming.provider.url}
location=${location}

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.

Nach oben