Maven 3を使ってSpring Bootアプリケーションにアクティブプロファイルを設定しようとしています。 pom.xmlでdefault active profileとプロパティspring.profiles.activeをdevelopmentに設定しています。
<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>。
SpringBootのアクティブプロファイルをMavenプロファイルで設定するには、他に何をすればよいのでしょうか?
よろしくお願いします。
MavenのプロファイルとSpringのプロファイルは全く別のものです。pom.xmlには spring.profiles.active
という変数が定義されていますが、これはビルド時には利用できますが、実行時には利用できません。これが、デフォルトのプロファイルだけが有効になる理由です。
MavenプロファイルをSpringにバインドするには?
アプリケーションが起動したときに利用できるように、ビルド変数をアプリケーションに渡す必要があります。
1.1. application.properties
にプレースホルダーを定義します。
[email protected]@
Spring.profiles.active@`変数は、Mavenプロファイルから宣言されたプロパティと一致する必要があります。
2.pom.xmlでリソースフィルタリングを有効にします。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
...
</build>
ビルドが実行されると、src/main/resources
ディレクトリ内のすべてのファイルがMavenによって処理され、application.properties
内のプレースホルダーが、Mavenプロファイルで定義した変数に置き換えられます。
詳細については、このユースケースを説明した私の投稿]1を参照してください。
以下のコマンドで実行できます。ここでは、スプリングプロファイル local
を使って実行したいと思います。
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"
Spring Boot Maven Pluginを使用する必要があります。
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
<configuration>
<profiles>
<profile>foo</profile>
<profile>bar</profile>
</profiles>
</configuration>
...
</plugin>
...
</plugins>
...
</build>
...
</project>