MavenによるSpringBootのアクティブプロファイルの設定

Maven 3を使ってSpring Bootアプリケーションにアクティブプロファイルを設定しようとしています。 pom.xmlでdefault active profileとプロパティspring.profiles.activedevelopmentに設定しています。

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <spring.profiles.active>development</spring.profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

しかし、アプリケーションを実行するたびに、ログに以下のメッセージが表示されます。

No active profile set, falling back to default profiles: default

と表示され、SpringBootのプロファイルがデフォルト(application-development.propertiesではなくapplication.propertiesを読み込む)に設定されています
<br&gt。 SpringBootのアクティブプロファイルをMavenプロファイルで設定するには、他に何をすればよいのでしょうか? よろしくお願いします。

ソリューション

MavenのプロファイルとSpringのプロファイルは全く別のものです。pom.xmlには spring.profiles.active という変数が定義されていますが、これはビルド時には利用できますが、実行時には利用できません。これが、デフォルトのプロファイルだけが有効になる理由です。

MavenプロファイルをSpringにバインドするには?

アプリケーションが起動したときに利用できるように、ビルド変数をアプリケーションに渡す必要があります。

1.1. application.properties にプレースホルダーを定義します。

    spring.profiles.active=@spring.profiles.active@

Spring.profiles.active@`変数は、Mavenプロファイルから宣言されたプロパティと一致する必要があります。

2.pom.xmlでリソースフィルタリングを有効にします。

                src/main/resources
                true


        ...

ビルドが実行されると、src/main/resourcesディレクトリ内のすべてのファイルがMavenによって処理され、application.properties内のプレースホルダーが、Mavenプロファイルで定義した変数に置き換えられます。

詳細については、このユースケースを説明した私の投稿]1を参照してください。

解説 (2)

以下のコマンドで実行できます。ここでは、スプリングプロファイル local を使って実行したいと思います。

spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"

解説 (1)

Spring Boot Maven Pluginを使用する必要があります。


  ...

    ...

      ...

        org.springframework.boot
        spring-boot-maven-plugin
        1.5.1.RELEASE


            foo
            bar


        ...

      ...

    ...

  ...
解説 (0)