Получить аргументы командной строки из 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.бежать.профили