Рубрики
Без рубрики

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

Узнайте, как передавать аргументы из командной строки в приложение Spring Boot

Автор оригинала: baeldung.

1. Обзор

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

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

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

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

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

2.1. Пружинный ботинок 1.x

Для Spring Boot 1.x мы можем передать аргументы нашему приложению с помощью -Run.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 мы можем передать аргументы с помощью -Spring-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 :

  • Аргументы командной строки имеют приоритет над application.properties values

При необходимости мы можем запретить приложению преобразовывать аргументы командной строки в свойства:

@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

С выпуском 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.

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