Befehlszeilenargumente im Spring Boot

1. Übersicht

In diesem kurzen Tutorial wird erläutert, wie Befehlszeilenargumente an eine Spring Boot-Anwendung übergeben werden.

Wir können Befehlszeilenargumente verwenden, um unsere Anwendung zu konfigurieren, Anwendungseigenschaften zu überschreiben oder benutzerdefinierte Argumente zu übergeben.

2. Maven-Befehlszeilenargumente

Lassen Sie uns zunächst sehen, wie wir Argumente übergeben können, während wir unsere Anwendung mit dem Maven Plugin ausführen.

Später werden wir sehen, wie wir auf die Argumente in unserem Code zugreifen können.

2.1. Spring Boot 1.x.

Für Spring Boot 1.x können wir die Argumente mit -Drun.arguments an unsere Anwendung übergeben :

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

Wir können unserer App auch mehrere Parameter übergeben:

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

Beachten Sie, dass:

  • Argumente sollten durch Kommas getrennt werden
  • Jedem Argument sollte - vorangestellt werden.
  • Wir können auch Konfigurationseigenschaften wie den im obigen Beispiel gezeigten spring.main.banner-Modus übergeben

2.2. Spring Boot 2.x.

Für Spring Boot 2.x können wir die Argumente mit -Dspring-boot.run.arguments übergeben :

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

3. Gradle-Befehlszeilenargumente

Als nächstes erfahren Sie, wie Sie Argumente übergeben, während Sie unsere Anwendung mit dem Gradle Plugin ausführen.

Wir müssen unsere bootRun- Task in der Datei build.gradle konfigurieren :

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

Jetzt können wir die Befehlszeilenargumente wie folgt übergeben:

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

4. Überschreiben der Systemeigenschaften

Neben der Übergabe benutzerdefinierter Argumente können wir auch Systemeigenschaften überschreiben.

Hier ist zum Beispiel unsere application.properties- Datei:

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

Um den Wert von server.port zu überschreiben , müssen wir den neuen Wert folgendermaßen übergeben (für Spring Boot 1.x):

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

Ähnliches gilt für Spring Boot 2.x:

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

Beachten Sie, dass:

  • Spring Boot konvertiert Befehlszeilenargumente in Eigenschaften und fügt sie als Umgebungsvariablen hinzu
  • Wir können kurze Befehlszeilenargumente –port = 8085 anstelle von –server.port = 8085 verwenden, indem wir einen Platzhalter in unseren application.properties verwenden :
    server.port=${port:8080}
  • Befehlszeilenargumente haben Vorrang vor den Werten von application.properties

Bei Bedarf können wir verhindern, dass unsere Anwendung Befehlszeilenargumente in Eigenschaften konvertiert:

@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. Zugriff auf Befehlszeilenargumente

Mal sehen, wie wir über die main () -Methode unserer Anwendung auf die Befehlszeilenargumente zugreifen können :

@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); } }

Dadurch werden die Argumente gedruckt, die wir über die Befehlszeile an unsere Anwendung übergeben haben. Sie können sie jedoch auch später in unserer Anwendung verwenden.

6. Übergeben von Befehlszeilenargumenten an den SpringBootTest

Mit der Veröffentlichung von Spring Boot 2.2 haben wir die Möglichkeit erhalten, Befehlszeilenargumente beim Testen mit @SpringBootTest und seinem args- Attribut einzufügen :

@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. Fazit

In diesem Artikel haben wir gelernt, wie Sie Argumente über die Befehlszeile an unsere Spring Boot-Anwendung übergeben und wie Sie dies sowohl mit Maven als auch mit Gradle tun.

Wir haben auch gezeigt, wie Sie über Ihren Code auf diese Argumente zugreifen können, um Ihre Anwendung zu konfigurieren.