SpringBootのコマンドライン引数

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は、コマンドライン引数をプロパティに変換し、それらを環境変数として追加します
  • 我々は、短いコマンドライン引数を使用することができます= 8085を-portの代わりに-server.port = 8085当社でプレースホルダを使用することにより、application.properties
    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.コマンドライン引数をSpringBootTestに渡す

Spring Boot 2.2のリリースにより、@ SpringBootTestとそのargs属性を使用してテスト中にコマンドライン引数を挿入できるようになりました。

@SpringBootTest(args = "--spring.main.banner-mode=off") public class ApplicationTest { @Test public void whenUsingSpringBootTestArgs_thenCommandLineArgSet(@Autowired Environment env) { Assertions.assertThat(env.getProperty("spring.main.banner-mode")).isEqualTo("off"); } }

7.結論

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

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