Spring Boot - Propriétés de l'application

Les propriétés d'application nous aident à travailler dans différents environnements. Dans ce chapitre, vous allez apprendre à configurer et à spécifier les propriétés d'une application Spring Boot.

Propriétés de la ligne de commande

L'application Spring Boot convertit les propriétés de la ligne de commande en propriétés Spring Boot Environment. Les propriétés de la ligne de commande ont priorité sur les autres sources de propriété. Par défaut, Spring Boot utilise le numéro de port 8080 pour démarrer Tomcat. Apprenons comment changer le numéro de port en utilisant les propriétés de la ligne de commande.

Step 1 - Après avoir créé un fichier JAR exécutable, exécutez-le en utilisant la commande java –jar <JARFILE>.

Step 2 - Utilisez la commande donnée dans la capture d'écran ci-dessous pour modifier le numéro de port de l'application Spring Boot en utilisant les propriétés de la ligne de commande.

Note - Vous pouvez fournir plusieurs propriétés d'application à l'aide du délimiteur -.

Fichier de propriétés

Les fichiers de propriétés sont utilisés pour conserver un nombre «N» de propriétés dans un seul fichier pour exécuter l'application dans un environnement différent. Dans Spring Boot, les propriétés sont conservées dans leapplication.properties fichier sous le chemin de classe.

Le fichier application.properties se trouve dans le src/main/resourcesannuaire. Le code de l'exempleapplication.properties le fichier est donné ci-dessous -

server.port = 9090
spring.application.name = demoservice

Notez que dans le code ci-dessus, le service de démonstration de l'application Spring Boot démarre sur le port 9090.

Fichier YAML

Spring Boot prend en charge les configurations de propriétés basées sur YAML pour exécuter l'application. Au lieu deapplication.properties, on peut utiliser application.ymlfichier. Ce fichier YAML doit également être conservé dans le chemin de classe. L'échantillonapplication.yml le fichier est donné ci-dessous -

spring:
   application:
      name: demoservice
   server:
port: 9090

Propriétés externalisées

Au lieu de conserver le fichier de propriétés sous classpath, nous pouvons conserver les propriétés dans un emplacement ou un chemin différent. Lors de l'exécution du fichier JAR, nous pouvons spécifier le chemin du fichier de propriétés. Vous pouvez utiliser la commande suivante pour spécifier l'emplacement du fichier de propriétés lors de l'exécution du JAR -

-Dspring.config.location = C:\application.properties

Utilisation de l'annotation @Value

L'annotation @Value est utilisée pour lire la valeur de la propriété d'environnement ou d'application dans le code Java. La syntaxe pour lire la valeur de la propriété est indiquée ci-dessous -

@Value("${property_key_name}")

Regardez l'exemple suivant qui montre la syntaxe pour lire le spring.application.name valeur de propriété dans la variable Java à l'aide de l'annotation @Value.

@Value("${spring.application.name}")

Observez le code ci-dessous pour une meilleure compréhension -

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {
   @Value("${spring.application.name}")
   private String name;
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
   @RequestMapping(value = "/")
   public String name() {
      return name;
   }
}

Note - Si la propriété n'est pas trouvée lors de l'exécution de l'application, Spring Boot lève l'exception d'argument illégal comme Could not resolve placeholder 'spring.application.name' in value "${spring.application.name}".

Pour résoudre le problème d'espace réservé, nous pouvons définir la valeur par défaut de la propriété en utilisant la syntaxe thr donnée ci-dessous -

@Value("${property_key_name:default_value}")

@Value("${spring.application.name:demoservice}")

Profil actif Spring Boot

Spring Boot prend en charge différentes propriétés basées sur le profil actif Spring. Par exemple, nous pouvons conserver deux fichiers distincts pour le développement et la production afin d'exécuter l'application Spring Boot.

Profil actif de ressort dans application.properties

Voyons comment avoir un profil actif Spring dans application.properties. Par défaut, application. properties sera utilisé pour exécuter l'application Spring Boot. Si vous souhaitez utiliser des propriétés basées sur le profil, nous pouvons conserver un fichier de propriétés distinct pour chaque profil, comme indiqué ci-dessous -

application.properties

server.port = 8080
spring.application.name = demoservice

application-dev.properties

server.port = 9090
spring.application.name = demoservice

application-prod.properties

server.port = 4431
spring.application.name = demoservice

Lors de l'exécution du fichier JAR, nous devons spécifier le profil actif du ressort en fonction de chaque fichier de propriétés. Par défaut, l'application Spring Boot utilise le fichier application.properties. La commande pour définir le profil actif du ressort est indiquée ci-dessous -

Vous pouvez voir le nom du profil actif dans le journal de la console comme indiqué ci-dessous -

2017-11-26 08:13:16.322  INFO 14028 --- [           
   main] com.tutorialspoint.demo.DemoApplication  :
   The following profiles are active: dev

Maintenant, Tomcat a démarré sur le port 9090 (http) comme indiqué ci-dessous -

2017-11-26 08:13:20.185  INFO 14028 --- [           
   main] s.b.c.e.t.TomcatEmbeddedServletContainer : 
   Tomcat started on port(s): 9090 (http)

Vous pouvez définir le profil actif Production comme indiqué ci-dessous -

Vous pouvez voir le nom du profil actif dans le journal de la console comme indiqué ci-dessous -

2017-11-26 08:13:16.322  INFO 14028 --- [           
   main] com.tutorialspoint.demo.DemoApplication  :
   The following profiles are active: prod

Maintenant, Tomcat a démarré sur le port 4431 (http) comme indiqué ci-dessous -

2017-11-26 08:13:20.185  INFO 14028 --- [          
   main] s.b.c.e.t.TomcatEmbeddedServletContainer :
   Tomcat started on port(s): 4431 (http)

Profil actif de ressort pour application.yml

Voyons comment garder le profil actif Spring pour application.yml. Nous pouvons conserver les propriétés du profil actif Spring dans le seulapplication.ymlfichier. Pas besoin d'utiliser le fichier séparé comme application.properties.

Voici un exemple de code pour conserver les profils actifs Spring dans le fichier application.yml. Notez que le délimiteur (---) est utilisé pour séparer chaque profil dans le fichier application.yml.

spring:
   application:
      name: demoservice
server:
   port: 8080

---
spring:
   profiles: dev
   application:
      name: demoservice
server:
   port: 9090

---
spring: 
   profiles: prod
   application:
      name: demoservice
server: 
   port: 4431

La commande de définir le profil actif de développement est donnée ci-dessous -

Vous pouvez voir le nom du profil actif dans le journal de la console comme indiqué ci-dessous -

2017-11-26 08:41:37.202  INFO 14104 --- [           
   main] com.tutorialspoint.demo.DemoApplication  : 
   The following profiles are active: dev

Maintenant, Tomcat a démarré sur le port 9090 (http) comme indiqué ci-dessous -

2017-11-26 08:41:46.650  INFO 14104 --- [           
   main] s.b.c.e.t.TomcatEmbeddedServletContainer : 
   Tomcat started on port(s): 9090 (http)

La commande pour définir le profil actif de production est donnée ci-dessous -

Vous pouvez voir le nom du profil actif dans le journal de la console comme indiqué ci-dessous -

2017-11-26 08:43:10.743  INFO 13400 --- [    
   main] com.tutorialspoint.demo.DemoApplication  : 
   The following profiles are active: prod

Cela démarrera Tomcat sur le port 4431 (http) comme indiqué ci-dessous:

2017-11-26 08:43:14.473  INFO 13400 --- [     
   main] s.b.c.e.t.TomcatEmbeddedServletContainer : 
   Tomcat started on port(s): 4431 (http)