Arguments de ligne de commande dans Spring Boot

1. Vue d'ensemble

Dans ce rapide didacticiel, nous verrons comment passer des arguments de ligne de commande à une application Spring Boot.

Nous pouvons utiliser des arguments de ligne de commande pour configurer notre application, remplacer les propriétés de l'application ou transmettre des arguments personnalisés.

2. Arguments de ligne de commande Maven

Tout d'abord, voyons comment nous pouvons passer des arguments lors de l'exécution de notre application à l'aide du plug-in Maven.

Plus tard, nous verrons comment accéder aux arguments de notre code.

2.1. Spring Boot 1.x

Pour Spring Boot 1.x, nous pouvons transmettre les arguments à notre application en utilisant -Drun.arguments :

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

Nous pouvons également transmettre plusieurs paramètres à notre application:

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

Notez que:

  • Les arguments doivent être séparés par des virgules
  • Chaque argument doit être précédé de -
  • Nous pouvons également passer des propriétés de configuration, comme spring.main.banner-mode montré dans l'exemple ci-dessus

2.2. Spring Boot 2.x

Pour Spring Boot 2.x, nous pouvons transmettre les arguments en utilisant -Dspring-boot.run.arguments :

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

3. Arguments de ligne de commande Gradle

Ensuite, découvrons comment passer des arguments lors de l'exécution de notre application en utilisant Gradle Plugin.

Nous devons configurer notre bootRun tâche dans build.gradle fichier:

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

Maintenant, nous pouvons passer les arguments de ligne de commande comme suit:

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

4. Remplacement des propriétés système

En plus de passer des arguments personnalisés, nous pouvons également remplacer les propriétés système.

Par exemple, voici notre fichier application.properties :

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

Pour remplacer la valeur server.port , nous devons transmettre la nouvelle valeur de la manière suivante (pour Spring Boot 1.x):

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

De même pour Spring Boot 2.x:

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

Notez que:

  • Spring Boot convertit les arguments de ligne de commande en propriétés et les ajoute en tant que variables d'environnement
  • Nous pouvons utiliser de courts arguments de ligne de commande –port = 8085 au lieu de –server.port = 8085 en utilisant un espace réservé dans notre application.properties :
    server.port=${port:8080}
  • Les arguments de ligne de commande ont priorité sur les valeurs application.properties

Si nécessaire, nous pouvons empêcher notre application de convertir des arguments de ligne de commande en propriétés:

@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. Accès aux arguments de ligne de commande

Voyons comment nous pouvons accéder aux arguments de ligne de commande à partir de la méthode main () de notre application :

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

Cela affichera les arguments que nous avons passés à notre application à partir de la ligne de commande, mais nous pourrions également les utiliser plus tard dans notre application.

6. Passer des arguments de ligne de commande au SpringBootTest

Avec la sortie de Spring Boot 2.2, nous avons eu la possibilité d'injecter des arguments de ligne de commande pendant les tests en utilisant @SpringBootTest et son attribut 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. Conclusion

Dans cet article, nous avons appris comment passer des arguments à notre application Spring Boot à partir de la ligne de commande et comment le faire en utilisant à la fois Maven et Gradle.

Nous avons également montré comment vous pouvez accéder à ces arguments à partir de votre code, afin de configurer votre application.