1. 概要

この記事では、SpringがMavenおよびGradleビルドメソッドを介して提供するプロパティ拡張メカニズムについて説明します。

2. Maven

2.1. デフォルト設定

spring-boot-starter-parent を使用するMavenプロジェクトの場合、プロパティ拡張を利用するために追加の構成は必要ありません。

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

これで、@…@プレースホルダーを使用してプロジェクトのプロパティを拡張できます。 Mavenから取得したプロジェクトのバージョンをプロパティに保存する方法の例を次に示します。

expanded.project.version=@project.version@
expanded.project.property=@custom.property@

これらの拡張は、次のパターンに一致する構成ファイル内でのみ使用できます。

  • ** / application * .yml
  • ** / application * .yaml
  • ** / application * .properties

2.2. 手動設定

spring -boot-starter-parent の親がない場合は、このフィルタリングと拡張を手動で構成する必要があります。 含める必要があります資力 <への要素ビルド> 私たちのセクション pom.xml ファイル:

<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>     

そして< プラグイン>

<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>

タイプ${variable.name} の標準プレースホルダーを使用する必要がある場合は、useDefaultDelimeterstrueに設定し、application.propertiesは次のようになります。

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

3. Gradle

3.1. 標準のGradleソリューション

SpringBootドキュメントのGradlesolution は、Mavenプロパティのフィルタリングおよび拡張と100% c互換性がありません。

プロパティ拡張メカニズムを使用できるようにするには、build.gradleに次のコードを含める必要があります。

processResources {
    expand(project.properties)
}

これは限定的なソリューションであり、Mavenのデフォルト構成とは次の違いがあります。

  1. ドットのあるプロパティをサポートしていません(例: user.name)。Gradleはドットをオブジェクトプロパティの区切り文字として理解します
  2. 特定の構成ファイルのセットだけでなく、すべてのリソースファイルをフィルタリングします
  3. デフォルトのドル記号プレースホルダー${…}を使用するため、標準のSpringプレースホルダーと競合します

3.2. Maven互換ソリューション

標準のMavenソリューションを複製し、@…@スタイルのプレースホルダーを利用するには、build.gradleに次のコードを追加する必要があります。

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])
            }
        }
    }
}

これにより、プロジェクトのすべてのプロパティが解決されます。 まだドットでプロパティを定義することはできません(例: user.name)in build.gradle ですが、 gradle.properties ファイルを使用して、標準のJavaプロパティ形式でプロパティを定義できます。また、ドット付きのプロパティもサポートしています(例: database.url)。

このビルドは、プロジェクト構成ファイルのみをフィルタリングし、すべてのリソースをフィルタリングするわけではなく、Mavenソリューションと100% c互換性があります。

4. 結論

このクイックチュートリアルでは、MavenとGradleの両方のビルドメソッドを使用してSpring Bootプロパティを自動的に拡張する方法と、一方から他方に簡単に移行する方法を説明しました。

完全なソースの例は、GitHubにあります。