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