GradleからbootRunを実行する時にコマンドライン引数でパラメータを渡したい

GradleからbootRun (Spring Bootアプリケーションの起動タスク)を実行する時に、コマンドライン引数でパラメータを渡す方法についてです。

注:古めのバージョン(Spring Boot 1.4.x, Gradle 3.x)で確認しているため、最新バージョンでは動作しない可能性があります。

build.gradleで指定する場合

はじめに、 build.gradle で指定する場合は以下のように書きます。

bootRun {
   jvmArgs  ['-Dspring.profiles.active=local']
}

コマンドライン引数で渡す場合

そもそもSpring Bootでは、環境変数やプロパティファイルなど、多様で柔軟な方式で外部設定値を与えることができます。
コマンドライン引数もそれらの選択肢のうちの一つであり、プロパティファイルを書き換えたり環境変数を指定するまでもないようなケースで便利(お手軽)です。

いきなり結論ですが、コマンド実行の際は以下のようにします。

$ ./gradlew bootRun -PjvmArgs="-Dspring.profiles.active=local"

-P はプロジェクトプロパティを設定するGradleのオプションです。

合わせて、 build.gradle も以下のようにします。

bootRun {
    if (project.hasProperty('jvmArgs')) {
        jvmArgs project.jvmArgs.split('\\s+') as List
    }
}

ハイブリッド版

build.gradle でデフォルト値は決めつつ、コマンドライン引数で追加の設定を与えたいような、上記2つのハイブリッド版です。
コマンド実行方法は同じなので省略します。 build.gradle をちょっと書き換えるだけでOKです。このあたりの柔軟性はやりすぎ注意ですが、やはりGradleは便利ですね。

bootRun {
    def myJvmArgs = ['-Dfoo=aaa']
    if (project.hasProperty('jvmArgs')) {
        myJvmArgs.addAll(project.jvmArgs.split('\\s+') as List)
    }
    jvmArgs myJvmArgs
}