Spring Bootのコマンドライン引数

1概要

このクイックチュートリアルでは、Spring Bootアプリケーションにコマンドライン引数を渡す方法について説明します。

コマンドライン引数を使用してアプリケーションを設定したり、アプリケーションのプロパティを上書きしたり、カスタム引数を渡したりできます。

2 Mavenのコマンドライン引数

まず、Mavenプラグインを使ってアプリケーションを実行しながら引数を渡す方法を見てみましょう。

後で、コード内の引数にアクセスする方法がわかります。

2.1. Spring Boot 1.x

Spring Boot 1.xでは、 -Drun.arguments を使用してアプリケーションに引数を渡すことができます。

mvn spring-boot:run -Drun.arguments=--customArgument=custom

アプリに複数のパラメータを渡すこともできます。

mvn spring-boot:run -Drun.arguments=--spring.main.banner-mode=off,--customArgument=custom

ご了承ください:

  • 引数はコンマで区切る必要があります

  • 各引数の先頭には - を付ける必要があります

  • 設定プロパティも渡すことができます。

上記の例に示されている spring.main.banner-mode

2.2. Spring Boot 2.x

Spring Boot 2.xでは、引数を渡すことができます。

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom

3 Gradleのコマンドライン引数

次に、Gradleプラグインを使用してアプリケーションを実行しながら引数を渡す方法を見てみましょう。

build.gradle ファイルで bootRun タスクを設定する必要があります。

bootRun {
    if (project.hasProperty('args')) {
        args project.args.split(',')
    }
}

これで、次のようにコマンドライン引数を渡すことができます。

./gradlew bootRun -Pargs=--spring.main.banner-mode=off,--customArgument=custom

4システムプロパティの上書き

カスタム引数を渡す以外に、システムプロパティをオーバーライドすることもできます。

たとえば、これが application.properties ファイルです。

server.port=8081
spring.application.name=SampleApp

server.port 値をオーバーライドするには、次の方法で新しい値を渡す必要があります(Spring Boot 1.xの場合)。

mvn spring-boot:run -Drun.arguments=--server.port=8085

Spring Boot 2.xの場合も同様です。

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085

ご了承ください:

  • Spring Bootはコマンドライン引数をプロパティに変換して追加します。

環境変数としてそれらを ** 代わりに短いコマンドライン引数 – port = 8085 を使用できます。

application.properties にプレースホルダーを使用して – server.port = 8085 :

+[ソース、bash、ガター:、true]

server.port=${port:8080}
  • コマンドライン引数は application.properties よりも優先されます。

必要に応じて、アプリケーションがコマンドライン引数をプロパティに変換しないようにできます。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[]args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.setAddCommandLineProperties(false);
        application.run(args);
    }
}

5コマンドライン引数へのアクセス

アプリケーションの main() メソッドからコマンドライン引数にアクセスする方法を見てみましょう。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[]args) {
        for(String arg:args) {
            System.out.println(arg);
        }
        SpringApplication.run(Application.class, args);
    }
}

これにより、コマンドラインからアプリケーションに渡した引数が表示されますが、後でアプリケーションで使用することもできます。

6. 結論

この記事では、Spring Bootアプリケーションにコマンドラインから引数を渡す方法と、MavenとGradleの両方を使用してそれを行う方法を学びました。

アプリケーションを設定するために、コードからこれらの引数にアクセスする方法も示しました。