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