Kommandolinjeargumenter i Spring Boot
1. Oversigt
I denne hurtige vejledning diskuterer vi, hvordan du sender kommandolinjeargumenter til en Spring Boot-applikation.
Vi kan bruge kommandolinjeargumenter til at konfigurere vores applikation, tilsidesætte applikationsegenskaber eller videregive brugerdefinerede argumenter.
2. Maven kommandolinjeargumenter
Lad os først se, hvordan vi kan sende argumenter, mens vi kører vores applikation ved hjælp af Maven Plugin.
Senere ser vi, hvordan du får adgang til argumenterne i vores kode.
2.1. Spring Boot 1.x
For Spring Boot 1.x kan vi videregive argumenterne til vores applikation ved hjælp af -Drun.arguments:
mvn spring-boot: run -Drun.arguments = - customArgument = custom
Vi kan også overføre flere parametre til vores app:
mvn spring-boot: run -Drun.arguments = - spring.main.banner-mode = off, - customArgument = custom
Noter det:
- Argumenter skal adskilles med komma
- Hvert argument skal have forud for -
- Vi kan også videregive konfigurationsegenskaber, som f.eks spring.main.banner-mode vist i eksemplet ovenfor
2.2. Spring Boot 2.x
For Spring Boot 2.x kan vi videregive argumenterne ved hjælp af -Dspring-boot.run.arguments:
mvn spring-boot: run -Dspring-boot.run.arguments = - spring.main.banner-mode = off, - customArgument = custom
3. Gradle kommandolinjeargumenter
Lad os derefter opdage, hvordan vi sender argumenter, mens vi kører vores applikation ved hjælp af Gradle Plugin.
Vi bliver nødt til at konfigurere vores bootRun opgave i build.gradle fil:
bootRun {if (project.hasProperty ('args')) {args project.args.split (',')}}
Nu kan vi videregive kommandolinjeargumenterne som følger:
./gradlew bootRun -Pargs = - spring.main.banner-mode = off, - customArgument = custom
4. Tilsidesættelse af systemegenskaber
Bortset fra at sende tilpassede argumenter kan vi også tilsidesætte systemegenskaber.
For eksempel er her vores application.properties fil:
server.port = 8081 spring.application.name = SampleApp
For at tilsidesætte server.port værdi, skal vi videregive den nye værdi på følgende måde (for Spring Boot 1.x):
mvn spring-boot: kør -Drun.arguments = - server.port = 8085
Tilsvarende for Spring Boot 2.x:
mvn spring-boot: kør -Dspring-boot.run.arguments = - server.port = 8085
Noter det:
- Spring Boot konverterer kommandolinjeargumenter til egenskaber og tilføjer dem som miljøvariabler
- Vi kan bruge korte kommandolinjeargumenter –Port = 8085 i stedet for –Server.port = 8085 ved at bruge en pladsholder i vores application.properties:
server.port = $ {port: 8080}
- Kommandolinjeargumenter har forrang over application.properties værdier
Hvis det er nødvendigt, kan vi stoppe vores applikation fra at konvertere kommandolinjeargumenter til egenskaber:
@SpringBootApplication public class Application udvider SpringBootServletInitializer {public static void main (String [] args) {SpringApplication application = new SpringApplication (Application.class); application.setAddCommandLineProperties (false); application.run (args); }}
5. Adgang til kommandolinjeargumenter
Lad os se, hvordan vi kan få adgang til kommandolinjeargumenterne fra vores applikationer hoved () metode:
@SpringBootApplication public class Application udvider SpringBootServletInitializer {public static void main (String [] args) {for (String arg: args) {System.out.println (arg); } SpringApplication.run (Application.class, args); }}
Dette vil udskrive de argumenter, vi har sendt til vores ansøgning fra kommandolinjen, men vi kan også bruge dem senere i vores ansøgning.
6. Aflevering Kommandolinjeargumenter til SpringBootTest
Med frigivelsen af Spring Boot 2.2 fik vi muligheden for at indsprøjte kommandolinjeargumenter under test ved hjælp af @SpringBootTest ogdet er argumenterer attribut:
@SpringBootTest (args = "--spring.main.banner-mode = off") offentlig klasse ApplicationTest {@Test offentlig ugyldig, nårUsingSpringBootTestArgs_thenCommandLineArgSet (@Autowired Environment env) {Assertions.assertThat (env.getPropertyanner ("spring.main) mode ")). isEqualTo (" off "); }}
7. Konklusion
I denne artikel lærte vi, hvordan vi overførte argumenter til vores Spring Boot-applikation fra kommandolinjen, og hvordan man gør det ved hjælp af både Maven og Gradle.
Vi har også vist, hvordan du kan få adgang til disse argumenter fra din kode for at konfigurere din applikation.