Gradle spring-boot
プラグインを使用していますが、テスト実行のためにスプリングアクティブプロファイルを選択する必要があります。
spring.profiles.active
システムプロパティをbootRun
プラグインのタスクに渡すにはどうすればよいですか?
すでに失敗したもの:
task bootRunLocal {
systemProperty "spring.profiles.active", "local"
System.setProperty("spring.profiles.active", "local")
tasks.bootRun.execute() // I suspect that this task is executed in a separate JVM
}
また、一部のコマンドラインマジックも失敗します。
./gradle -Dspring.profiles.active=local bootRun
誰かが親切に私のトラブルを解決するのを手伝ってもらえますか?
回答とコメントから更新:
私はsystemPropertyを設定し、それをスプリングコンテナに渡すことができます:
run {
systemProperty "spring.profiles.active", "local"
}
ただし、これを行うと、bootRun
タスクとbootRunLocal
タスクの両方にローカルプロファイルが設定されます。このプロパティをbootRunLocal
タスクに設定し、booRun
からbootRunLocal
タスクを呼び出す方法が必要です。
それは非常に単純に聞こえるかもしれませんが、私は構造化されたMavenの世界から平和をもたらしています。
task local {
run { systemProperty "spring.profiles.active", "local" }
}
bootRun.mustRunAfter local
次に、gradleコマンドを次のように実行します。
gradle bootRun local
私はここに遅れていることを知っています...しかし、私は最近この正確な問題に直面しました。コマンドラインでシステムプロパティとしてspring.profiles.activeとspring.config.locationを設定してbootRunを起動しようとしました。
したがって、コマンドラインの「マジック」を機能させるには、これをbuild.gradleに追加するだけです
bootRun {
systemProperties System.properties
}
次に、コマンドラインから実行しています...
gradle -Dspring.profiles.active=local bootRun
Env変数を追加するために個別のタスクを定義する必要なく、ローカルをアクティブプロファイルとして設定します。
システムプロパティをタスクに渡す一般的な方法はありません。簡単に言えば、個別のJVMをフォークするタスクでのみサポートされています。
bootRunLocal
タスク(上記で定義)は別のJVMで実行されません。また、タスクでのexecute()
の呼び出しはサポートされていません(いずれにしても実行フェーズで発生する必要があります) )。一方、テストは常に別のJVMで実行されます(Test
タスクによって実行される場合)。テスト実行のシステムプロパティを設定するには、対応するTest
タスクを構成する必要があります。例えば:
test {
systemProperty "spring.profiles.active", "local"
}
詳細については、 Gradle Build Language Reference のTest
を参照してください。
以下のgradle 2.14では、例が機能します。以下のように追加しました。
System.properties ['spring.profiles.active']がnullの場合、デフォルトのプロファイルが設定されます。
bootRun {
systemProperty 'spring.profiles.active', System.properties['spring.profiles.active']
}
コマンドラインの例
gradle bootRun -Dspring.profiles.active=dev
誰かがこの問題を抱える場合の参考として:
Vladの回答は私にとってはうまくいきませんでしたが、これは2.4でうまく機能します。
task local <<{
bootRun { systemProperty "spring.profiles.active", "local" }
}
local.finalizedBy bootRun
gradle local
ここでのOPの正確なリクエストへの応答...
Spring.profiles.activeシステムプロパティをbootRunプラグインのタスクに渡すにはどうすればよいですか?
そして、「パス」でOPが「コマンドラインからのパス」または「IDE呼び出し)からのパス」を意味すると仮定します...これは私がやりたい方法です。
これをbuild.gradleに追加します。
/**
* Task from spring-boot-gradle-plugin, configured for easier development
*/
bootRun {
/* Lets you pick Spring Boot profile by system properties, e.g. gradle bootRun -Dspring.profiles.active=dev */
systemProperties = System.properties
}
次に、起動するときに、システムプロパティを設定するために使い慣れたJavaフラグを使用します
gradle bootRun -Dspring.profiles.active=local
環境変数オプション(SPRING_PROFILES_ACTIVE=local gradle bootRun
)...そして、それはLinux/OS X(bashなど)とWindows(とにかくcmd.exe)の間の簡単な移植性です。
このブログ投稿 からこの方法を学びました。
(更新:どういうわけか、同じ推奨事項で@Erichの応答を見逃していました。おっと!移植性などに関する追加の詳細のために、答えを残しています。)
spring-boot-gradle-plugin documentation によると、このような引数を渡すことができるはずです
./gradlew bootRun --args='--spring.profiles.active=dev'
これは4.9以降の新しいgradle機能のようです。私は自分のプロジェクトでそれを使用し、そのまま使用できました。
タスクを実行する前にorg.springframework.boot.gradle.run.BootRunTask
を拡張し、プロパティを設定する新しいタスク(名前がbootRunLocal
の場合)を作成できます。次のコードでこのようなタスクを作成できます。
task bootRunLocal(type: org.springframework.boot.gradle.run.BootRunTask) {
doFirst() {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
systemProperty "spring.profiles.active", "local"
}
}
詳細はこちらをご覧ください: https://karolkalinski.github.io/gradle-task-that-runs-spring-boot-aplication-with-profile-activated/
これは動作します:
SPRING_PROFILES_ACTIVE = production ./gradlew app-service:bootRun
SpringBoot 2.0.0-M5以降、setSystemProperties()
はタスクbootRunのメソッドではなくなりました。 build.gradleを更新する必要があります
bootRun {
execSpec {
// System.properties["spring.profiles.active"]
systemProperties System.properties
}
}
これは、springBootの実行タスクがorg.gradle.process.JavaExecSpec
これはGradle 4.2を使用して私のために機能します
Gradleタスクからのサポートを必要としない別の方法: Java_TOOL_OPTIONS 環境変数を設定します:
Java_TOOL_OPTIONS='-Dfoo=bar' gradle ...
または、変数に有用なものが既に含まれている場合:
Java_TOOL_OPTIONS="$Java_TOOL_OPTIONS -Dfoo=bar" gradle ...
// defualt value
def profiles = 'dev'
bootRun {
args = ["--spring.profiles.active=" + profiles]
}
その後、次のように、gradleタスクを開始するときに特定のバージョンを選択するだけです
./gradlew bootRun -P dev
「dev」は「prod」になります
runコマンドを使用すると、ビルドファイルに追加できますrun { systemProperties = System.properties }
とgradleで始まるrun -Dspring.profiles.active=local