Maven 3を使用して、Spring Bootアプリケーションでアクティブなプロファイルを設定しようとしています。
pom.xmlでデフォルトのアクティブプロファイルとプロパティ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を読み取ります)
Mavenプロファイルを使用してSpringBootアクティブプロファイルを設定するには、他に何をすればよいですか?
ヘルプは高く評価されています。
MavenプロファイルとSpringプロファイルは、まったく異なるものです。 pom.xmlは、ビルドプロセスで使用できますが、実行時ではないspring.profiles.active
変数を定義します。そのため、デフォルトのプロファイルのみがアクティブになります。
MavenプロファイルをSpringにバインドする方法は?
ビルド変数をアプリケーションに渡して、起動時に使用できるようにする必要があります。
application.properties
でプレースホルダーを定義します:
[email protected]@
@spring.profiles.active@
変数は、Mavenプロファイルから宣言されたプロパティと一致する必要があります。
Pom.xmlでリソースフィルタリングを有効にします。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
…
</build>
ビルドが実行されると、src/main/resources
ディレクトリ内のすべてのファイルがMavenによって処理され、application.properties
内のプレースホルダーがMavenプロファイルで定義した変数に置き換えられます。
詳細については、 私の投稿に移動 このユースケースについて説明しました。
またはかなり簡単に:
mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
次のコマンドを使用して実行できます。ここでは、スプリングプロファイルlocal
を使用して実行します。
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"
開発では、特定のMavenプロファイルがアクティブ化されたときにSpring Bootプロファイルをアクティブ化するのは簡単です。次のようなMavenプロファイルで spring-boot-maven-plugin の profiles
プロパティ を使用する必要があります。
<project>
<...>
<profiles>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>development</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profiles>
</...>
</project>
次のコマンドを実行して、Spring BootとMaven development
プロファイルの両方を使用できます。
mvn spring-boot:run -Pdevelopment
Spring Bootプロファイルを同じプロファイル名のMavenプロファイルにマップできるようにしたい場合は、単一のMavenプロファイルを定義し、Mavenプロパティの存在が検出されたときにそれを有効にすることができます。このプロパティは、mvn
コマンドを実行するときに指定する必要がある唯一のものです。
プロファイルは次のようになります。
<profile>
<id>spring-profile-active</id>
<activation>
<property>
<name>my.active.spring.profiles</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>${my.active.spring.profiles}</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
</profile>
また、次のコマンドを実行して、Spring BootとMaven development
プロファイルの両方を使用できます。
mvn spring-boot:run -Dmy.active.spring.profiles=development
または :
mvn spring-boot:run -Dmy.active.spring.profiles=integration
または :
mvn spring-boot:run -Dmy.active.spring.profiles=production
など...
この種の設定は、いくつかのタスクを実行したり、何かを評価したりするために渡されるmy.active.spring.profiles
プロパティに依存する汎用Mavenプロファイルのように意味があります。
たとえば、この方法を使用して、アプリケーションをパッケージ化し、選択した環境に固有のドッカーイメージを構築する汎用Mavenプロファイルを構成します。
Springbootアプリケーションのプロファイルを設定する方法は複数あります。
これをプロパティファイルに追加できます。
spring.profiles.active=dev
プログラムによる方法:
SpringApplication.setAdditionalProfiles("dev");
テストにより、アクティブなプロファイルを簡単に指定できます
@ActiveProfiles("dev")
Unix環境で
export spring_profiles_active=dev
JVMシステムパラメータ
-Dspring.profiles.active=dev
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>