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

Аргументы командной строки в 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.

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