Befehlszeilenargumente in Spring Boot

Befehlszeilenargumente in Spring Boot

1. Überblick

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 Folgendes vorangestellt werden:

  • Wir können auch Konfigurationseigenschaften übergeben, wiespring.main.banner-mode, wie im obigen Beispiel gezeigt

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 die Aufgabe vonbootRunin der Datei vonbuild.gradlekonfigurieren:

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 von Systemeigenschaften

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

Hier ist zum Beispiel unsereapplication.properties-Datei:

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

Um den Wert vonserver.portzu ü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 unserenapplication.properties verwenden:

    server.port=${port:8080}
  • Befehlszeilenargumente haben Vorrang vorapplication.properties Werten

Bei Bedarf können wir unsere Anwendung daran hindern, Befehlszeilenargumente in Eigenschaften zu konvertieren:

@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

Lassen Sie uns sehen, wie wir über diemain()-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 jedoch auch später in unserer Anwendung verwendet werden.

6. Fazit

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

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