Перейти к основному содержимому

Аргументы командной строки в Spring Boot

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы обсудим, как передавать аргументы командной строки в приложение Spring Boot.

Мы можем использовать аргументы командной строки для настройки нашего приложения, переопределения свойств приложения или передачи пользовательских аргументов.

2. Аргументы командной строки Maven

Во-первых, давайте посмотрим, как мы можем передавать аргументы при запуске нашего приложения с помощью плагина Maven.

Позже мы увидим, как получить доступ к аргументам в нашем коде.

2.1. Весенняя загрузка 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. Весенняя загрузка 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. Передача аргументов командной строки в SpringBootTest

С выпуском Spring Boot 2.2 мы получили возможность вводить аргументы командной строки во время тестирования, используя @SpringBootTest и его атрибут args :

@SpringBootTest(args = "--spring.main.banner-mode=off")
public class ApplicationTest {

@Test
public void whenUsingSpringBootTestArgs_thenCommandLineArgSet(@Autowired Environment env) {
Assertions.assertThat(env.getProperty("spring.main.banner-mode")).isEqualTo("off");
}
}

7. Заключение

В этой статье мы узнали, как передавать аргументы нашему приложению Spring Boot из командной строки и как это делать с помощью Maven и Gradle.

Мы также показали, как вы можете получить доступ к этим аргументам из вашего кода, чтобы настроить ваше приложение.