Opdrachtregelargumenten in Spring Boot

1. Overzicht

In deze korte zelfstudie bespreken we hoe u opdrachtregelargumenten kunt doorgeven aan een Spring Boot-toepassing.

We kunnen opdrachtregelargumenten gebruiken om onze applicatie te configureren, applicatie-eigenschappen te overschrijven of aangepaste argumenten door te geven.

2. Maven-opdrachtregelargumenten

Laten we eerst eens kijken hoe we argumenten kunnen doorgeven tijdens het uitvoeren van onze applicatie met behulp van de Maven Plugin.

Later zullen we zien hoe we toegang kunnen krijgen tot de argumenten in onze code.

2.1. Spring Boot 1.x

Voor Spring Boot 1.x kunnen we de argumenten doorgeven aan onze applicatie met Drun.argumenten:

mvn spring-boot: run -Drun.arguments = - customArgument = custom

We kunnen ook meerdere parameters doorgeven aan onze app:

mvn spring-boot: run -Drun.arguments = - spring.main.banner-mode = uit, - customArgument = aangepast

Let daar op:

  • Argumenten moeten door komma's worden gescheiden
  • Elk argument moet worden voorafgegaan door -
  • We kunnen ook configuratie-eigenschappen doorgeven, zoals spring.main.banner-mode getoond in het bovenstaande voorbeeld

2.2. Spring Boot 2.x

Voor Spring Boot 2.x kunnen we de argumenten doorgeven met -Dspring-boot.run.arguments:

mvn spring-boot: run -Dspring-boot.run.arguments = - spring.main.banner-mode = uit, - customArgument = aangepast

3. Grijp opdrachtregelargumenten

Laten we vervolgens kijken hoe we argumenten kunnen doorgeven tijdens het uitvoeren van onze applicatie met Gradle Plugin.

We zullen onze bootRun taak in build.gradle het dossier:

bootRun {if (project.hasProperty ('args')) {args project.args.split (',')}}

Nu kunnen we de opdrachtregelargumenten als volgt doorgeven:

./gradlew bootRun -Pargs = - spring.main.banner-mode = uit, - customArgument = aangepast

4. Systeemeigenschappen overschrijven

Naast het doorgeven van aangepaste argumenten, kunnen we ook systeemeigenschappen overschrijven.

Hier is bijvoorbeeld onze application.properties het dossier:

server.port = 8081 spring.application.name = SampleApp

Om het Server poort waarde, moeten we de nieuwe waarde op de volgende manier doorgeven (voor Spring Boot 1.x):

mvn spring-boot: run -Drun.arguments = - server.port = 8085

Evenzo voor Spring Boot 2.x:

mvn spring-boot: run -Dspring-boot.run.arguments = - server.port = 8085

Let daar op:

  • Spring Boot converteert opdrachtregelargumenten naar eigenschappen en voegt deze toe als omgevingsvariabelen
  • We kunnen korte opdrachtregelargumenten gebruiken -Poort = 8085 in plaats van –Server.port = 8085 door een tijdelijke aanduiding te gebruiken in onze application.properties:
    server.port = $ {poort: 8080}
  • Opdrachtregelargumenten hebben voorrang op application.properties waarden

Indien nodig kunnen we voorkomen dat onze applicatie opdrachtregelargumenten omzet in eigenschappen:

@SpringBootApplication public class Applicatie breidt SpringBootServletInitializer uit {public static void main (String [] args) {SpringApplication application = nieuwe SpringApplication (Application.class); application.setAddCommandLineProperties (false); application.run (args); }}

5. Toegang tot opdrachtregelargumenten

Laten we eens kijken hoe we toegang kunnen krijgen tot de opdrachtregelargumenten van de hoofd() methode:

@SpringBootApplication openbare klasse Toepassing breidt SpringBootServletInitializer uit {openbare statische leegte hoofd (String [] args) {voor (String arg: args) {System.out.println (arg); } SpringApplication.run (Application.class, args); }}

Hiermee worden de argumenten afgedrukt die we vanaf de opdrachtregel aan onze applicatie hebben doorgegeven, maar we kunnen ze ook later in onze applicatie gebruiken.

6. Passeren Opdrachtregelargumenten voor het SpringBootTest

Met de release van Spring Boot 2.2 hebben we de mogelijkheid gekregen om opdrachtregelargumenten te injecteren tijdens het testen met @BuienRadarNL en zijn args attribuut:

@SpringBootTest (args = "--spring.main.banner-mode = off") openbare klasse ApplicationTest {@Test openbare leegte whenUsingSpringBootTestArgs_thenCommandLineArgSet (@Autowired Environment env) {Assertions.assertThat (env.getPropain.b- spring.main.b- mode ")). isEqualTo (" off "); }}

7. Conclusie

In dit artikel hebben we geleerd hoe we argumenten kunnen doorgeven aan onze Spring Boot-applicatie vanaf de opdrachtregel en hoe we dit kunnen doen met zowel Maven als Gradle.

We hebben ook laten zien hoe u toegang kunt krijgen tot die argumenten vanuit uw code om uw applicatie te configureren.