Получить аргументы командной строки из spring-boot: run
есть ли способ ввода аргументов при запуске spring-boot application (mvn spring-boot:run) из командной строки, а затем получить их в main ()?
6 ответов:
смотреть на!--9-->исходный код из spring-boot-maven-плагина я обнаружил, что вам нужно сделать:
mvn spring-boot:run -Drun.arguments="arg1,arg2"
еще один способ получить дополнительную информацию о том, какие варианты
run
цельspring-boot
плагин поддерживает выполнение следующей команды:mvn help:describe -Dcmd=spring-boot:run -Ddetail
Для Пружинной Загрузки 2.x, Источник здесь и теперь вам нужно использовать
-Dspring-boot.run.arguments="args1,args2"
если вы используете Gradle и хотите иметь возможность передавать командную строку аргументы для Gradle
bootRun
задача, которую сначала нужно настроить, например так:bootRun { if ( project.hasProperty('args') ) { args project.args.split('\s+') } }
и запустить задачу с помощью
gradle bootRun -Pargs="arg1 arg2"
при передаче нескольких аргументов с помощью -Drun.аргументы, если аргумент в свою очередь имеет значения, разделенные запятыми, то используется только первое значение каждого аргумента. Чтобы избежать этого повторите аргумент столько раз, сколько число значений.
это скорее обходной путь. Не уверен, что есть альтернатива, если разделитель не отличается - как '|'.
например, вопрос:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"
выбирает только "тест" профиль для выше команда.
решение:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,--spring.profiles.active=dev"
выбирает оба профиля " dev " и "test" для приведенной выше команды.
имейте в виду : способ передачи аргументов зависит от
spring-boot
основная версия.TLDR
Для Пружинной Загрузки 1:
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
Для Spring Boot 2:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
1)
spring-boot-maven-plugin
версия и theSpring Boot
версии, которую вы используете должна быть выровнена.в соответствии с основной версией Spring Boot (
1
или2
), тоspring-boot-maven-plugin
на1
или2
версия действительно должна быть использована.
Если вашpom.xml
наследует отspring-boot-starter-parent
:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>ONE_OR_TWO_VERSION</version> </parent>
в вашем pom версия используемого плагина даже не должна быть указана, поскольку эта зависимость плагина наследуется:
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> ... </configuration> </plugin> </plugins>
в случае
pom.xml
не наследует отspring-boot-starter-parent
не забудьте выровнять версияspring-boot-maven-plugin
С точной версиейspring boot
вы хотите использовать.2) передача аргументов в командной строке spring-boot-maven-плагин: 1.Х. Х
для одного аргумента:
mvn spring-boot:run -Drun.arguments="argOne"
для нескольких :
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
The страница плагина maven документы :
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) передача аргументов в командной строке spring-boot-maven-plugin: 2.Х. Х
для одного аргумента:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne"
для нескольких :
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
я не нашел документацию плагина для 2.X. X версия, которая относится к этому.
Но этоorg.springframework.boot.maven.AbstractRunMojo
классspring-boot-maven-plugin:2.0.0.M3
плагин ссылается на это свойство пользователя: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) подсказка: когда вы передаете более одного аргумента, пробелы между запятыми считаются.
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
будет интерпретироваться как
["argOne", "argTwo"]
а это :
mvn spring-boot:run -Dspring-boot.run.arguments="argOne, argTwo"
будет интерпретироваться как
["argOne", " argTwo"]
это то, что сработало для меня (
spring-boot v1.4.3.RELEASE
),.mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
Spring Boot 1 as 2 предоставляет способ передать несколько профилей в качестве аргумента и избежать проблемы, связанной с запятой, используемой как разделитель между args и значениями, переданными как активный профиль.
вместо того, чтобы писать :
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev
использовать пружинный ботинок Maven
profiles
свойства это удобный ярлыкspring.profiles.active
такие как следующие :свойство пользователя Maven отличается в зависимости от версии Spring Boot.
для Spring Boot 1.4+, то есть
run.profiles
:mvn spring-boot:run -Drun.profiles=dev,test
для Spring Boot 2, то есть
spring-boot.run.profiles
:mvn spring-boot:run -Dspring-boot.run.profiles=dev,test
из документации плагина:
профили:
профили пружины для активации. Удобство быстрого указания в весна.профили.активный аргумент. В командной строке используйте запятые, чтобы разделите несколько профилей.
тип: java.ленг.Строка[]
С: 1.3
: Не Требуется
Свойства Пользователя: spring-boot.бежать.профили