Аргументы командной строки в Spring Boot
1. обзор
В этом кратком руководстве мы обсудим, как передавать аргументы командной строки в приложение Spring Boot.
Мы можем использовать аргументы командной строки для настройки нашего приложения, переопределения свойств приложения или передачи пользовательских аргументов.
2. Аргументы командной строки Maven
Во-первых, давайте посмотрим, как мы можем передавать аргументы при запуске нашего приложения с помощью подключаемого модуля Maven.
Позже мы увидим, как получить доступ к аргументам в нашем коде.
2.1. Spring Boot 1.x
Для Spring Boot 1.x мы можем передать аргументы нашему приложению, используя-Drun.arguments:
mvn spring-boot:run -Drun.arguments=--customArgument=custom
Мы также можем передать несколько параметров в наше приложение:
mvn spring-boot:run -Drun.arguments=--spring.main.banner-mode=off,--customArgument=custom
Обратите внимание, что:
-
Аргументы должны быть разделены запятыми
-
Каждый аргумент должен начинаться с префикса -
-
Мы также можем передать свойства конфигурации, такие какspring.main.banner-mode, показанные в примере выше.
2.2. Spring Boot 2.x
Для Spring Boot 2.x мы можем передавать аргументы, используя-Dspring-boot.run.arguments:
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom
3. Аргументы командной строки Gradle
Затем давайте узнаем, как передавать аргументы при запуске нашего приложения с помощью подключаемого модуля Gradle.
Нам нужно будет настроить нашу задачуbootRun в файлеbuild.gradle:
bootRun {
if (project.hasProperty('args')) {
args project.args.split(',')
}
}
Теперь мы можем передать аргументы командной строки следующим образом:
./gradlew bootRun -Pargs=--spring.main.banner-mode=off,--customArgument=custom
4. Переопределение свойств системы
Помимо передачи пользовательских аргументов, мы также можем переопределить системные свойства.
Например, вот наш файлapplication.properties:
server.port=8081
spring.application.name=SampleApp
Чтобы переопределить значениеserver.port, нам нужно передать новое значение следующим образом (для Spring Boot 1.x):
mvn spring-boot:run -Drun.arguments=--server.port=8085
Аналогично для Spring Boot 2.x:
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
Обратите внимание, что:
-
Spring Boot преобразует аргументы командной строки в свойства и добавляет их в качестве переменных среды
-
Мы можем использовать короткие аргументы командной строки–port=8085 вместо–server.port=8085, используя заполнитель в нашемapplication.properties:
server.port=${port:8080}
-
Аргументы командной строки имеют приоритет над значениямиapplication.properties
При необходимости мы можем остановить наше приложение от преобразования аргументов командной строки в свойства:
@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. Доступ к аргументам командной строки
Давайте посмотрим, как мы можем получить доступ к аргументам командной строки из методаmain() нашего приложения:
@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);
}
}
Это напечатает аргументы, которые мы передали нашему приложению из командной строки, но мы могли бы также использовать их позже в нашем приложении.
6. Заключение
В этой статье мы узнали, как передавать аргументы в наше приложение Spring Boot из командной строки и как это делать с помощью Maven и Gradle.
Мы также показали, как вы можете получить доступ к этим аргументам из вашего кода, чтобы настроить приложение.