«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, нам нужно передать новое значение следующим образом (для Spring Boot 1.x):
server.port=8081
spring.application.name=SampleApp
Аналогично для Spring Boot 2.x:
mvn spring-boot:run -Drun.arguments=--server.port=8085
Обратите внимание, что:
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
Spring Boot преобразует аргументы командной строки в свойства и добавляет их в качестве переменных среды Мы можем использовать короткие аргументы командной строки — порт =8085 вместо –server.port=8085, используя заполнитель в наших application.properties: server.port=${port:8080} Аргументы командной строки имеют приоритет над значениями application.properties
-
При необходимости мы может помешать нашему приложению преобразовывать аргументы командной строки в свойства:
5. Доступ к аргументам командной строки
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.setAddCommandLineProperties(false);
application.run(args);
}
}
Давайте посмотрим, как мы можем получить доступ к аргументам командной строки из метода 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:
7. Заключение
@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");
}
}
В этой статье мы узнали, как передавать аргументы нашему приложению Spring Boot из командной строки и как это делать с помощью Maven и Gradle.
Мы также показали, как вы можете получить доступ к этим аргументам из вашего кода, чтобы настроить ваше приложение.
«