1概要

この記事では、MavenとGradleのビルド方法を通じてSpringが提供するプロパティ拡張メカニズムを探ります。


2 Maven

** 2.1. デフォルト設定


spring-boot-starter-parent

を使用するMavenプロジェクトの場合、プロパティ展開を利用するために追加の設定は必要ありません。

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

これで、

@ …​ @

プレースホルダーを使用してプロジェクトのプロパティを拡張できます。

これは、Mavenから取得したプロジェクトのバージョンを自分の所有物に保存する方法の例です。

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

私たちはこれらのパターンにマッチする設定ファイル内でのみこれらの展開を使うことができます:




  • /application ** .yml




  • /application ** .yaml




  • /application ** .properties


2.2. 手動設定


spring-boot-starter-parent

parentがない場合は、このフィルタリングと展開を手動で設定する必要があります。

pom.xml

ファイルの<

__build>


セクションに

resources__要素を含める必要があります。

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

そして<

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


$ \ {variable.name}

型の標準プレースホルダーを使用する必要がある場合は、

useDefaultDelimeters



true

に設定する必要があります。あなたの

application.properties

は次のようになります。

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


3 Gradle


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

Spring Bootのドキュメントに記載されているGradle

解決

は、Mavenプロパティと完全な互換性はありません。フィルタリングと拡張。

プロパティ拡張メカニズムを使用できるようにするには、

build.gradle

に次のコードを含める必要があります。

processResources {
    expand(project.properties)
}

これは限定的な解決策であり、Mavenのデフォルト設定とは次の点が異なります。

  1. ドット付きのプロパティ(__user.nameなど)はサポートされません.

ドットをオブジェクトプロパティの区切り文字として理解する

  1. デフォルトのドル記号プレースホルダー

    $ \ {…​}

    を使用しているため、競合

標準の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])
            }
        }
    }
}

これにより、プロジェクトのすべてのプロパティが解決されます。 build.gradle

でドット付きのプロパティ(user.nameなど)を定義することはできませんが、

gradle.properties

ファイルを使用して標準のJavaプロパティ形式でプロパティを定義できます。また、ドット付きのプロパティ(

database.urlなど)もサポートされます。 )

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


4結論

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

完全なソースの例はhttps://github.com/eugenp/tutorials/tree/master/spring-boot-property-exp[over on GitHub]にあります。