さまざまなスプリングプロファイルを有効にしてbootRun
プロセスを起動するようにgradleを設定しようとしています。
現在のbootRun
構成は次のようになります。
bootRun {
// pass command line options from gradle to bootRun
// usage: gradlew bootRun "-Dspring.profiles.active=local,protractor"
if (System.properties.containsKey('spring.profiles.active')) {
systemProperty "spring.profiles.active", System.properties['spring.profiles.active']
}
}
gradle
タスクを使用してシステムプロパティを設定し、bootRun
を実行します。
私の試みは次のように見えました:
task bootRunDev
bootRunDev {
System.setProperty("spring.profiles.active", "Dev")
}
いくつかの質問:
systemProperty
は、スプリングブートbootRun構成の一部ですか?bootRunDev
の前にbootRun
の設定を行う必要があります-エリック
最も簡単な方法は、デフォルトを定義して上書きできるようにすることです。この場合のsystemPropertyの使用方法はわかりません。単純な引数が仕事をします。
def profiles = 'prod'
bootRun {
args = ["--spring.profiles.active=" + profiles]
}
Devを実行するには:
./gradlew bootRun -Pdev
タスクに依存関係を追加するには、次のようなことができます。
task setDevProperties(dependsOn: bootRun) << {
doFirst {
System.setProperty('spring.profiles.active', profiles)
}
}
Gradleでこれを達成する方法はたくさんあります。
編集:
環境ごとに個別の構成ファイルを構成します。
if (project.hasProperty('prod')) {
apply from: 'gradle/profile_prod.gradle'
} else {
apply from: 'gradle/profile_dev.gradle'
}
各構成は、たとえば次のタスクをオーバーライドできます。
def profiles = 'prod'
bootRun {
systemProperty "spring.profiles.active", activeProfile
}
この場合、prod
フラグを指定して実行します:
./gradlew <task> -Pprod
ドキュメント で説明されているように、環境変数を使用してスプリングプロパティを設定できます。したがって、アクティブなプロファイル(spring.profiles.active
)を設定するには、Unixシステムで次のコードを使用できます。
SPRING_PROFILES_ACTIVE=test gradle clean bootRun
また、Windowsでは次を使用できます。
SET SPRING_PROFILES_ACTIVE=test
gradle clean bootRun
Spring Boot 2.0+を使用しているユーザーの場合、以下を使用して、特定のプロファイルセットでアプリを実行するタスクをセットアップできます。
task bootRunDev(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') {
group = 'Application'
doFirst() {
main = bootJar.mainClassName
classpath = sourceSets.main.runtimeClasspath
systemProperty 'spring.profiles.active', 'dev'
}
}
次に、IDEから./gradlew bootRunDev
または同様のものを実行するだけです。
このシェルコマンドを使用すると動作します。
SPRING_PROFILES_ACTIVE=test gradle clean bootRun
悲しいことに、これは私が見つけた最も簡単な方法です。その呼び出しの環境プロパティを設定し、アプリを実行します。
インターネットからの誰かのために、同様の質問がありました https://stackoverflow.com/a/35848666/906265 私もそれから修正された答えをここに提供します:
// build.gradle
<...>
bootRun {}
// make sure bootRun is executed when this task runs
task runDev(dependsOn:bootRun) {
// TaskExecutionGraph is populated only after
// all the projects in the build have been evaulated https://docs.gradle.org/current/javadoc/org/gradle/api/execution/TaskExecutionGraph.html#whenReady-groovy.lang.Closure-
gradle.taskGraph.whenReady { graph ->
logger.lifecycle('>>> Setting spring.profiles.active to dev')
if (graph.hasTask(runDev)) {
// configure task before it is executed
bootRun {
args = ["--spring.profiles.active=dev"]
}
}
}
}
<...>
その後、ターミナルで:
gradle runDev
gradle 3.4.1
とspring boot 1.5.10.RELEASE
を使用している
異なるプロファイルとgradleタスクの依存関係を持つ4つの異なるタスクの構成:
bootRunLocal
およびbootRunDev
-特定のプロファイルで実行bootPostgresRunLocal
およびbootPostgresRunDev
はprevと同じですが、カスタムタスクrunPostgresDocker
およびkillPostgresDocker
をbootRunの前後に実行しますbuild.gradle
:
final LOCAL='local'
final DEV='dev'
void configBootTask(Task bootTask, String profile) {
bootTask.main = bootJar.mainClassName
bootTask.classpath = sourceSets.main.runtimeClasspath
bootTask.args = [ "--spring.profiles.active=$profile" ]
// systemProperty 'spring.profiles.active', profile // this approach also may be used
bootTask.environment = postgresLocalEnvironment
}
bootRun {
description "Run Spring boot application with \"$LOCAL\" profile"
doFirst() {
configBootTask(it, LOCAL)
}
}
task bootRunLocal(type: BootRun, dependsOn: 'classes') {
description "Alias to \":${bootRun.name}\" task: ${bootRun.description}"
doFirst() {
configBootTask(it, LOCAL)
}
}
task bootRunDev(type: BootRun, dependsOn: 'classes') {
description "Run Spring boot application with \"$DEV\" profile"
doFirst() {
configBootTask(it, DEV)
}
}
task bootPostgresRunLocal(type: BootRun) {
description "Run Spring boot application with \"$LOCAL\" profile and re-creating DB Postgres container"
dependsOn runPostgresDocker
finalizedBy killPostgresDocker
doFirst() {
configBootTask(it, LOCAL)
}
}
task bootPostgresRunDev(type: BootRun) {
description "Run Spring boot application with \"$DEV\" profile and re-creating DB Postgres container"
dependsOn runPostgresDocker
finalizedBy killPostgresDocker
doFirst() {
configBootTask(it, DEV)
}
}
VMオプションに追加:-Dspring.profiles.active = dev
私は、あなたのようなgradle bootRunDevを、余分な入力をすることなく呼び出すことができるようにするだけで簡単にしたかったのです。
これは私のために働いた-最初に私のタスクでbootRunを設定し、次にbootRunを実行した直後に私にとってうまくいった:)
task bootRunDev {
bootRun.configure {
systemProperty "spring.profiles.active", 'Dev'
}
}
bootRunDev.finalizedBy bootRun