wake-up-neo.com

Holen Sie sich Befehlszeilenargumente von Spring-Boot: run

Gibt es eine Möglichkeit, Argumente beim Start der Spring-Boot-Anwendung (mvn spring-boot: run) über die Befehlszeile einzugeben und diese dann in main () zu erhalten?

57
sandris

Wenn ich mir den Quellcode des Spring-Boot-Maven-Plugins anschaue, habe ich festgestellt, dass Sie Folgendes tun müssen:

mvn spring-boot:run -Drun.arguments="arg1,arg2"

Eine weitere Möglichkeit, weitere Informationen darüber zu erhalten, welche Optionen das run-Ziel des spring-boot-Plugins unterstützt, besteht darin, den folgenden Befehl auszuführen:

mvn help:describe -Dcmd=spring-boot:run -Ddetail

Für Spring Boot 2.x lautet die Quelle here und Sie müssen jetzt -Dspring-boot.run.arguments="args1,args2" verwenden.

Wenn Sie Gradle verwenden und Befehlszeilenargumente an die Gradle-Variable bootRun übergeben möchten, müssen Sie zunächst Folgendes konfigurieren:

bootRun {
    if ( project.hasProperty('args') ) {
        args project.args.split('\\s+')
    }
}

und führen Sie die Aufgabe mit gradle bootRun -Pargs="arg1 arg2" aus

90
geoand

Wenn mehrere Argumente mit -Drun.arguments übergeben werden und das Argument "durch Kommas getrennte" Werte hat, wird nur der erste Wert jedes Arguments verwendet. Um dies zu vermeiden, wiederholen Sie das Argument so oft wie die Anzahl der Werte.

Dies ist eher eine Problemumgehung. Ich bin nicht sicher, ob es eine Alternative gibt, es sei denn, das Trennzeichen unterscheidet sich - wie '|'.

E. Ausgabe:

mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"

Nimmt nur das Testprofil für den obigen Befehl an.

Problemumgehung:

mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,--spring.profiles.active=dev"

Wählt die beiden 'dev'- und' test'-Profile für den obigen Befehl aus.

31

Achtung: Die Art der Übergabe von Argumenten hängt von der spring-boot-Hauptversion ab.

TLDR

Für Spring Boot 1:

mvn spring-boot:run -Drun.arguments="argOne,argTwo"

Für Spring Boot 2:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"

1) spring-boot-maven-plugin-Version und die von Ihnen verwendete Spring Boot-Version muss ausgerichtet werden.

Entsprechend der verwendeten Spring Boot-Hauptversion (1 oder 2) sollte tatsächlich der spring-boot-maven-plugin in der 1- oder der 2-Version verwendet werden.
Wenn Ihr pom.xml von spring-boot-starter-parent erbt:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>ONE_OR_TWO_VERSION</version>
</parent>

In Ihrem Pom sollte die Version des verwendeten Plugins nicht einmal angegeben werden, da diese Plugin-Abhängigkeit vererbt wird:

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>                   
        <configuration>
           ...
        </configuration>
    </plugin>
</plugins>

Falls Ihr pom.xml nicht von spring-boot-starter-parent erbt, vergessen Sie nicht, die Version von spring-boot-maven-plugin an die genaue Version von spring boot anzupassen, die Sie verwenden möchten.

2) Argumente in der Befehlszeile mit spring-boot-maven-plugin übergeben: 1.X.X

Für ein Argument: 

mvn spring-boot:run -Drun.arguments="argOne"

für mehrere: 

mvn spring-boot:run -Drun.arguments="argOne,argTwo"

Die Maven Plugin Seite dokumentiert es:

  Name         Type       Since           Description
arguments  |  String[]  |  1.0  | Arguments that should be passed 
                                  to the application. On command line use 
                                  commas to separate multiple arguments.
                                  User property is: run.arguments.

3) Argumente in der Befehlszeile mit spring-boot-maven-plugin übergeben: 2.X.X

Für ein Argument: 

mvn spring-boot:run -Dspring-boot.run.arguments="argOne"

für mehrere: 

mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"

Ich habe die Plugin-Dokumentation für die 2.X.X-Version, die darauf verweist, nicht gefunden.
Die org.springframework.boot.maven.AbstractRunMojo-Klasse des spring-boot-maven-plugin:2.0.0.M3-Plugins verweist jedoch auf diese Benutzereigenschaft:

public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo
   ...
   @Parameter(property="spring-boot.run.arguments")
   private String[] arguments;
   ...
   protected RunArguments resolveApplicationArguments(){
     RunArguments runArguments = new RunArguments(this.arguments);
     addActiveProfileArgument(runArguments);
     return runArguments;
   }
   ...
 }

4) Hinweis: Wenn Sie mehr als ein Argument übergeben, werden Leerzeichen zwischen Kommas berücksichtigt.

mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"

wird als ["argOne", "argTwo"] interpretiert

Aber dieses :

mvn spring-boot:run -Dspring-boot.run.arguments="argOne, argTwo"

wird als ["argOne", " argTwo"] interpretiert

14
davidxxx

Und wenn Sie Eclipse verwenden ...

 | Parametername | Wert | 
 | run.arguments | "--name = Adam" | 
1
Adam

Spring Boot 1 as 2 bietet die Möglichkeit, mehrere Profile als Argument zu übergeben und das Problem zu vermeiden, das mit dem Komma zusammenhängt, das als Trennzeichen zwischen den Argumenten und den als aktiven Profil übergebenen Werten verwendet wird. 

Also anstatt zu schreiben: 

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev

verwenden Sie die Spring Boot Maven profiles-Eigenschaft Dies ist eine praktische Abkürzung für spring.profiles.active wie die folgenden:

Die Maven-Benutzereigenschaft unterscheidet sich je nach Spring Boot-Version. 

Für Spring Boot 1.4+ ist das run.profiles:

mvn spring-boot:run -Drun.profiles=dev,test

Für Spring Boot 2 ist das spring-boot.run.profiles:

mvn spring-boot:run -Dspring-boot.run.profiles=dev,test

Aus der Plugin-Dokumentation:

Profile:

Die Federprofile aktivieren. Komfortkürzel für die Angabe von das Argument 'spring.profiles.active'. Verwenden Sie in der Befehlszeile Kommas für trennen Sie mehrere Profile.

Geben Sie Folgendes ein: Java.lang.String []

Seit: 1.3

Erforderlich: Nein

Benutzereigenschaft: spring-boot.run.profiles

1
davidxxx

Das hat bei mir funktioniert (spring-boot v1.4.3.RELEASE).

mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
0
Anand Rockzz

Verwenden Sie für die neueste Version von Spring -Dspring-boot.run.arguments = wie im folgenden Beispiel gezeigt

spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"
0
Pratik Shukla