Argomenti della riga di comando in Spring Boot

1. Panoramica

In questo breve tutorial, discuteremo come passare argomenti della riga di comando a un'applicazione Spring Boot.

Possiamo utilizzare gli argomenti della riga di comando per configurare la nostra applicazione, sovrascrivere le proprietà dell'applicazione o passare argomenti personalizzati.

2. Argomenti della riga di comando Maven

Per prima cosa, vediamo come possiamo passare argomenti durante l'esecuzione della nostra applicazione utilizzando il plug-in Maven.

Successivamente, vedremo come accedere agli argomenti nel nostro codice.

2.1. Spring Boot 1.x

Per Spring Boot 1.x, possiamo passare gli argomenti alla nostra applicazione usando -Drun.arguments :

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

Possiamo anche passare più parametri alla nostra app:

mvn spring-boot:run -Drun.arguments=--spring.main.banner-mode=off,--customArgument=custom

Nota che:

  • Gli argomenti devono essere separati da virgole
  • Ogni argomento dovrebbe essere preceduto da -
  • Possiamo anche passare proprietà di configurazione, come la modalità spring.main.banner mostrata nell'esempio sopra

2.2. Spring Boot 2.x

Per Spring Boot 2.x, possiamo passare gli argomenti usando -Dspring-boot.run.arguments :

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom

3. Argomenti della riga di comando Gradle

Successivamente, scopriamo come passare argomenti durante l'esecuzione della nostra applicazione utilizzando Gradle Plugin.

Avremo bisogno di configurare il nostro bootRun compito in build.gradle di file:

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

Ora possiamo passare gli argomenti della riga di comando come segue:

./gradlew bootRun -Pargs=--spring.main.banner-mode=off,--customArgument=custom

4. Sostituzione delle proprietà di sistema

Oltre a passare argomenti personalizzati, possiamo anche sovrascrivere le proprietà di sistema.

Ad esempio, ecco il nostro file application.properties :

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

Per sovrascrivere il valore server.port , dobbiamo passare il nuovo valore nel modo seguente (per Spring Boot 1.x):

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

Allo stesso modo per Spring Boot 2.x:

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

Nota che:

  • Spring Boot converte gli argomenti della riga di comando in proprietà e li aggiunge come variabili di ambiente
  • Possiamo utilizzare brevi argomenti della riga di comando –port = 8085 invece di –server.port = 8085 utilizzando un segnaposto in application.properties :
    server.port=${port:8080}
  • Gli argomenti della riga di comando hanno la precedenza sui valori application.properties

Se necessario, possiamo impedire alla nostra applicazione di convertire gli argomenti della riga di comando in proprietà:

@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. Accesso agli argomenti della riga di comando

Vediamo come possiamo accedere agli argomenti della riga di comando dal metodo main () della nostra applicazione :

@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); } }

Questo stamperà gli argomenti passati alla nostra applicazione dalla riga di comando, ma potremmo anche usarli in seguito nella nostra applicazione.

6. Passaggio di argomenti della riga di comando a SpringBootTest

Con il rilascio di Spring Boot 2.2, abbiamo ottenuto la possibilità di inserire argomenti della riga di comando durante i test utilizzando @SpringBootTest e il suo attributo 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. Conclusione

In questo articolo, abbiamo imparato come passare argomenti alla nostra applicazione Spring Boot dalla riga di comando e come farlo utilizzando sia Maven che Gradle.

Abbiamo anche mostrato come puoi accedere a questi argomenti dal tuo codice, al fine di configurare la tua applicazione.