Pobieranie argumentów wiersza poleceń z spring-boot:run

Czy Jest jakiś sposób na wprowadzenie argumentów podczas uruchamiania aplikacji spring-boot (mvn spring-boot:run) z linii poleceń, a następnie pobranie ich w main ()?

Author: Shervin Asgari, 2014-04-27

6 answers

Patrząc na kod źródłowy wtyczki spring-boot-maven znalazłem, że musisz to zrobić:

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

Innym sposobem, aby uzyskać więcej informacji o opcjach run celem wtyczki spring-boot jest wykonanie następującego polecenia:

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

Na Wiosenne Buty 2.x, źródło jest tutaj i teraz musisz użyć -Dspring-boot.run.arguments="args1,args2"

Jeśli używasz Gradle i chcesz być w stanie przekazać argumenty wiersza poleceń do zadania Gradle bootRun, najpierw musisz konfiguracja, na przykład tak:

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

I uruchom zadanie używając gradle bootRun -Pargs="arg1 arg2"

 85
Author: geoand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-12 09:35:47

Podczas przekazywania wielu argumentów za pomocą-Drun.argumenty, jeśli argument z kolei ma wartości 'rozdzielone przecinkami', wtedy używana jest tylko pierwsza wartość każdego argumentu. Aby tego uniknąć, powtórz argument tyle razy, ile wynosi liczba wartości.

To raczej obejście. Nie wiem, czy istnieje alternatywa, chyba że ogranicznik jest inny - jak"/".

E. G Wydanie:

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

Wybiera tylko profil 'test' dla powyższego dowództwo.

Obejście:

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

Wybiera profile ' dev ' i 'test' dla powyższego polecenia.

 29
Author: Jebuselwyn Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-16 15:13:27

Należy pamiętać : sposób przekazywania argumentów zależy od głównej wersji spring-boot.

TLDR

Na Wiosenne Buty 1:

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

Na Wiosenne Buty 2:

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

1) spring-boot-maven-plugin wersja i używana wersja Spring Boot muszą być wyrównane.

Zgodnie z zastosowaną wersją Spring Boot major (1 lub 2), spring-boot-maven-plugin w wersji 1 lub 2 należy rzeczywiście użyć.
Jeśli twój pom.xml dziedziczy z spring-boot-starter-parent :

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

W Twoim pom, wersja użytej wtyczki nie powinna być nawet określona, ponieważ zależność ta jest dziedziczona:

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

W przypadku, gdy twoja pom.xml Nie dziedziczy z spring-boot-starter-parent, nie zapomnij wyrównać wersji spring-boot-maven-plugin z dokładną wersją spring boot, której chcesz użyć.

2) przekazywanie argumentów w wierszu poleceń za pomocą spring-boot-maven-plugin:1.X. X

Dla jednego argumentu:

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

Dla wielokrotności:

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

The strona wtyczki Mavena dokumentuje to:

  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) przekazywanie argumentów w wierszu poleceń za pomocą spring-boot-maven-plugin: 2.X. X

Dla jednego argumentu:

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

Dla wielokrotności:

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

Nie znalazłem dokumentacji wtyczki dla 2.Wersja X. X, która się do tego odnosi.
Jednak Klasa org.springframework.boot.maven.AbstractRunMojo wtyczki spring-boot-maven-plugin:2.0.0.M3 odnosi się do tej właściwości użytkownika:

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) podpowiedź : gdy przekazujesz więcej niż jeden argument, spacje między przecinkami są przemyślane.

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

Będzie interpretowane jako ["argOne", "argTwo"]

Ale to:

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

Będzie interpretowane jako ["argOne", " argTwo"]

 12
Author: davidxxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-08 08:06:03

I jeśli używasz Eclipse...

| Parameter Name | Value         |
| run.arguments  | "--name=Adam" |
 1
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-26 21:01:33

To mi się udało (spring-boot v1.4.3.RELEASE),.

mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
 0
Author: Anand Rockzz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-02 19:22:35

Spring Boot 1 as 2 umożliwia przekazanie wielu profili jako argumentu i uniknięcie problemu związanego z przecinkiem używanym zarówno jako separator między argami, jak i wartościami przekazywanymi jako aktywny profil.

Więc zamiast pisać:

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

Użyj właściwości Spring Boot Maven profiles , która jest wygodnym skrótem spring.profiles.active, takim jak:

Właściwość użytkownika Maven różni się w zależności od wersji Spring Boot.

Na Wiosenne Buty 1.4+, to jest run.profiles:

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

Dla Spring Boot 2, czyli spring-boot.run.profiles:

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

Z dokumentacji wtyczki:

Profile :

Profile sprężynowe do aktywacji. Wygodny skrót określający wiosna.profile.argument active. W wierszu poleceń użyj przecinków do rozdziel wiele Profili.

Typ: java.lang.String []

Od: 1.3

Wymagane: Nie

Własność Użytkownika: sprężynowe buty.uciekaj.profile

 0
Author: davidxxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 19:02:05