Automatische Eigenschaftserweiterung mit Spring Boot

1. Überblick

In diesem Artikel werden wir den Mechanismus zur Eigenschaftserweiterung untersuchen, den Spring durch die Maven- und Gradle-Buildmethoden bereitstellt.

2. Maven

2.1. Standardkonfiguration

Für Maven-Projekte, die spring-boot-starter-parent verwenden, sind keine zusätzlichen Konfigurationen erforderlich, um die Eigenschaftenerweiterungen zu nutzen:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
</parent>

Jetzt können wir die Eigenschaften unseres Projekts mit @ …​ @ Platzhaltern erweitern.

Hier ein Beispiel, wie wir die aus Maven entnommene Projektversion in unseren Eigenschaften speichern können:

----[email protected]@[email protected]@
----

Wir können diese Erweiterungen nur in Konfigurationsdateien verwenden, die diesen Mustern entsprechen:

  • /Anwendung ** .yml

  • /Anwendung ** .yaml

  • /application ** .properties

2.2. Manuelle Konfiguration

Wenn kein spring-boot-starter-parent -übergeordnetes Element vorhanden ist, müssen Sie diese Filterung und Erweiterung manuell konfigurieren. Wir müssen das resources -Element in den Abschnitt < _ build> unserer pom.xml_ -Datei einfügen:

<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>** ** /application** .yml</include>
            <include>** ** /application** .yaml</include>
            <include>** ** /application** .properties</include>
         </includes>
    </resource>
</resources>

Und in den < _ plugins> _ :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <delimiters>
            <delimiter>@</delimiter>
        </delimiters>
        <useDefaultDelimiters>false</useDefaultDelimiters>
    </configuration>
</plugin>

Wenn Sie die Standardplatzhalter vom Typ $ \ {variable.name} verwenden müssen, müssen Sie useDefaultDelimeters auf true setzen, und Ihre application.properties wird folgendermaßen aussehen:

expanded.project.version=${project.version}
expanded.project.property=${custom.property}

3. Gradle

3.1. Standard-Gradle-Lösung

Der Gradle solution der Spring Boot-Dokumentation ist nicht zu 100% mit der Maven-Eigenschaft kompatibel Filterung und Erweiterung.

Damit wir den Eigenschaftserweiterungsmechanismus verwenden können, müssen Sie den folgenden Code in build.gradle einfügen:

processResources {
    expand(project.properties)
}

Dies ist eine eingeschränkte Lösung mit den folgenden Unterschieden zur Standardkonfiguration von Maven:

  1. Unterstützt keine Eigenschaften mit Punkten (z. B. user.name) . Gradle

versteht Punkte als Objekteigenschafts-Trennzeichen .

  1. Verwendet die standardmäßigen Dollarzeichen-Platzhalter $ \ {…​} , was zu Konflikten führt

mit den Standard-Spring-Platzhaltern

3.2. Maven-kompatible Lösung

Damit wir die Maven-Standardlösung replizieren und die Platzhalter im Stil @ …​ @ verwenden können, müssen wir unserem build.gradle folgenden Code hinzufügen:

import org.apache.tools.ant.filters.ReplaceTokens
processResources {
    with copySpec {
        from 'src/main/resources'
        include '** ** /application** .yml'
        include '** ** /application** .yaml'
        include '** ** /application** .properties'
        project.properties.findAll().each {
          prop ->
            if (prop.value != null) {
                filter(ReplaceTokens, tokens:[(prop.key): prop.value])
                filter(ReplaceTokens, tokens:[('project.' + prop.key): prop.value])
            }
        }
    }
}

Dadurch werden alle Eigenschaften des Projekts aufgelöst. In the build.gradle können noch keine Eigenschaften mit Punkten (z. B. user.name) definiert werden. Jetzt können wir jedoch mit gradle.properties file Eigenschaften im Java-Standardeigenschaftsformat definieren. Außerdem werden Eigenschaften mit Punkten (z. B. database.url) unterstützt ) .

Dieser Build filtert nur die Projektkonfigurationsdateien und nicht alle Ressourcen und ist zu 100% mit der Maven-Lösung kompatibel.

4. Fazit

In diesem kurzen Lernprogramm haben wir gesehen, wie Spring Boot-Eigenschaften mithilfe der Maven- und Gradle-Build-Methoden automatisch erweitert werden, und wie wir problemlos von einer zur anderen migrieren können.

Das vollständige Quellbeispiel finden Sie auf GitHub unter https://github.com/eugenp/tutorials/tree/master/spring-boot-property-exp [over