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

1. Общ преглед

В този бърз урок ще обсъдим как да предаваме аргументи от командния ред на приложение Spring Spring.

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

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 Plugin.

Ние ще трябва да конфигурирате ни 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.

Също така показахме как можете да получите достъп до тези аргументи от вашия код, за да конфигурирате приложението си.