1. 序章

通常、プロジェクトのビルド構成には、アプリケーションに関する非常に多くの情報が含まれています。 この情報の一部は、アプリケーション自体で必要になる場合があります。 したがって、この情報をハードコーディングするのではなく、既存のビルド構成から使用できます。

この記事では、Spring Bootアプリケーションでプロジェクトのビルド構成からの情報を使用する方法を説明します。

2. ビルド情報

アプリケーションの説明とバージョンをWebサイトのホームページに表示するとします。

通常、この情報はpom.xmlにあります。

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>spring-boot</artifactId>
    <name>spring-boot</name>
    <packaging>war</packaging>
    <description>This is simple boot application for Spring boot actuator test</description>
    <version>0.0.1-SNAPSHOT</version>
...
</project>

3. アプリケーションプロパティファイルの情報を参照する

ここで、アプリケーションで上記の情報を使用するには、最初にアプリケーションプロパティファイルの1つでそれを参照する必要があります。

[email protected]@
[email protected]@

ここでは、ビルドプロパティ project.description の値を使用して、アプリケーションプロパティapplication-descriptionを設定しました。 同様に、application-versionproject.versionを使用して設定されます。

ここで最も重要なのは、プロパティ名の前後に@文字を使用することです。 これにより、SpringはMavenプロジェクトから名前付きプロパティを拡張するように指示されます。

これで、プロジェクトをビルドするときに、これらのプロパティがpom.xmlの値に置き換えられます。

この拡張は、リソースフィルタリングとも呼ばれます。 この種のフィルタリングは本番構成にのみ適用されることに注意してください。 したがって、 src / test /resourcesの下のファイルでビルドプロパティを使用することはできません。

もう1つの注意点は、 addResources フラグを使用すると、 spring-boot:runゴールがsrc / main /resourcesをクラスパスに直接追加することです。 これはホットリロードの目的には役立ちますが、リソースフィルタリングを回避し、その結果、この機能も回避します。

現在、上記のプロパティ拡張は、spring-boot-starter-parentを使用する場合にのみすぐに機能します。

3.1. springなしでプロパティを拡張-boot-starter-parent

spring-boot-starter-parent依存関係を使用せずにこの機能を有効にする方法を見てみましょう。

まず、pom.xml要素内でリソースフィルタリングを有効にする必要があります。

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

ここでは、 src / main /resourcesでのみリソースフィルタリングを有効にしています。

次に、maven-resources-pluginの区切り文字構成を追加できます。

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

useDefaultDelimitersプロパティをfalseとして指定していることに注意してください。 これにより、${placeholder}などの標準のSpringプレースホルダーがビルドによって拡張されないことが保証されます。

4. YAMLファイルでのビルド情報の使用

YAMLを使用してアプリケーションプロパティを保存している場合、@を使用してビルドプロパティを指定できない場合があります。 これは、@がYAMLの予約文字であるためです。

ただし、 maven-resources-plugin で別の区切り文字を構成することで、これを克服できます。

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

または、pom.xmlのプロパティブロックのresource.delimiterプロパティをオーバーライドするだけです。

<properties>
    <resource.delimiter>^</resource.delimiter>
</properties>

次に、YAMLファイルで^を使用できます。

application-description: ^project.description^
application-version: ^project.version^

5. 結論

この記事では、アプリケーションでMavenプロジェクト情報を使用する方法を説明しました。 これにより、アプリケーションプロパティファイルのプロジェクトビルド構成にすでに存在する情報をハードコーディングする必要がなくなります。

そしてもちろん、このチュートリアルに付属するコードは、GitHubにあります。