Spring Bootのコマンドライン引数
1. 概要
このクイックチュートリアルでは、コマンドライン引数をSpringBootアプリケーションに渡す方法について説明します。
コマンドライン引数を使用して、アプリケーションを構成したり、アプリケーションプロパティをオーバーライドしたり、カスタム引数を渡したりできます。
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の場合、-Dspring-boot.run.arguments:を使用して引数を渡すことができます
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はコマンドライン引数をプロパティに変換し、環境変数として追加します
-
application.propertiesでプレースホルダーを使用することにより、–server.port=8085の代わりに短いコマンドライン引数–port=8085を使用できます。
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の両方を使用して引数を渡す方法を学びました。
また、アプリケーションを構成するために、コードからこれらの引数にアクセスする方法も示しました。