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の両方を使用してそれを行う方法を学びました。
アプリケーションを設定するために、コードからこれらの引数にアクセスする方法も示しました。