02
Les composants de
Spring Boot
Chapitre 2 Les composants de Spring Boot
Initialisation Atelier 2
01 Les annotations de
04 d’une App. SB 07
SB
L’Auto-configuration
02 de SB
05
05 Loggin dans SB
03 SB DevTools 06 SB Actuator
Les Annotaions
01
de Spring Boot
Les annotations de Spring Boot
› Spring Boot Annotations sont une forme de métadonnées qui fournissent des données sur
un programme.
› En d’autres termes, les annotations sont utilisées pour fournir des informations
supplémentaires sur un programme.
› Dans Spring Boot, les annotations jouent un rôle crucial dans la configuration et la définition
de divers aspects de notre application.
©MAD
+24 annotations de Spring et Spring Boot
©MAD
L’auto-
configuration
02
de Spring Boot
Configuration simplifiée avec @SpringBootApplication (1/4)
› Lorsque nous créons notre application, il y a une seule classe appelée « DemoApplication » qui
est créée et générée par l’outil « Spring Tools Suite ». Cette classe sert de point de démarrage
de l’application.
Le paquet contenant le point d’entrée de notre
application est [Link].
Tous les autres packages, tels que dao,
controllers, services, etc., doivent être dans le
package demo.
©MAD
Configuration simplifiée avec @SpringBootApplication (2/4)
› Notre application commence par exécuter la classe DemoApplication.
› Cette classe est annotée avec @SpringBootApplication.
Annotation
SpringApplication Classe de démarrage
d’une application Spring.
©MAD
Configuration simplifiée avec @SpringBootApplication (3/4)
› L’annotation @SpringBootApplication est un composant clé des applications Spring Boot.
©MAD
Configuration simplifiée avec @SpringBootApplication (4/4)
› L’annotation @SpringBootApplication combine trois annotations essentielles :
@Configuration, @EnableAutoConfiguration et @ComponentScan :
@Configuration : cette annotation identifie la classe comme source de définitions de bean. Elle
vous permet de déclarer des beans et de configurer divers aspects de votre application.
@EnableAutoConfiguration : cette annotation active la fonction de configuration automatique de
Spring Boot. Elle configure automatiquement le contexte d’application Spring en fonction des
dépendances du projet et de l’environnement. Elle analyse automatiquement le chemin d’accès aux
classes (Classpath) pour identifier les bibliothèques, les composants spring et les configurations
requis par votre application et les configure en conséquence.
@ComponentScan : cette annotation analyse le package spécifié et ses sous-packages pour
découvrir les composants Spring, tels que les contrôleurs, les services, les référentiels, etc. Elle
permet le balayage des composants pour la détection automatique des grains et le câblage.
Il est possible d’analyser plusieurs packages : @ComponentScan ({"com.example1", "com.example2 ", "
..."})
©MAD Un bean est un simple POJO (Plain Old Java Object) géré par le conteneur IoC.
Exemple d’auto-configuration
Data Source, JDBC Template
› Par exemple, si le fichier Jar de la base de données H2 est présent dans le classpath et
que nous n’avons pas configuré manuellement de composants (beans) lié à la base de
données, la fonction de configuration automatique de Spring Boot le configure
automatiquement dans le projet. Cela inclut la configuration d’un pool de connexions, d’une
source de données et d’autres configurations nécessaires au fonctionnement de la base de
données.
Classpath est un paramètre transmis à une machine virtuelle Java, qui définit le chemin d’accès au répertoire où
se trouvent les classes et les packages Java pour l’exécution.
©MAD
Exemple d’auto-configuration
Spring MVC Template
› De même, lorsque nous ajoutons la dépendance spring-boot-starter-web dans le projet, la
configuration automatique de Spring Boot recherche que Spring MVC se trouve sur le
classpath. Elle configure automatiquement dispatcherServlet, une page d’erreur par défaut et
les fichiers jar web. Spring Boot inclut un serveur web intégré, et Tomcat est l’un des choix
pour ce conteneur intégré. Si Tomcat est présent dans le classpath, Spring Boot l’utilisera par
défaut. Cela signifie que vous n’avez pas besoin de configurer séparément un serveur Tomcat
externe. Il est intégré et configuré automatiquement.
› Exemple de page d’erreur par défaut :
©MAD
Spring Boot
03
DevTools
Spring Boot DevTools
› Spring Boot fournit un sous-projet appelé Spring Boot DevTools.
› DevTools est l’abréviation de Developer Tools.
› L’objectif du sous-projet est d’essayer d’améliorer le temps de développement tout en
travaillant avec l’application Spring Boot.
› Spring Boot DevTools récupère les modifications et redémarre l’application.
› Nous pouvons intégrer DevTools dans notre projet en ajoutant la dépendance suivante dans le
fichier [Link].
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
©MAD
Caractéristiques de Spring Boot DevTools (1/2)
› Spring Boot DevTools fournit les fonctionnalités suivantes :
Property Defaults
Automatic Restart
LiveReload
Global Settings
Remote Update and Restart
©MAD
Caractéristiques de Spring Boot DevTools (2/2)
› Property Defaults
Plusieurs des bibliothèques prises en charge par Spring Boot utilisent des caches pour améliorer les performances. Par
exemple, les moteurs de templates (Thymeleaf, Freemarker, Groovy Templates) mettront en cache les modèles compilés
pour éviter d’analyser à plusieurs reprises les fichiers de modèle. En outre, Spring MVC peut ajouter des en-têtes de mise
en cache HTTP aux réponses lors de la diffusion de ressources statiques. Bien que la mise en cache soit très bénéfique en
production, elle peut être contre-productive pendant le développement, vous empêchant de voir les modifications que
vous venez d’apporter à votre application. Pour cette raison, spring-boot-devtools désactivera ces options de mise en
cache par défaut.
› Automatic Restart
Les applications qui utilisent spring-boot-devtools redémarreront automatiquement chaque fois que les fichiers du
chemin d’accès aux classes changent. Cette fonctionnalité peut être utile lorsque vous travaillez dans un IDE, car elle offre
une boucle de rétroaction très rapide pour les modifications de code. Par défaut, toute entrée du classpath qui pointe vers
un dossier est surveillée pour détecter les modifications.
› LiveReload
Le module spring-boot-devtools inclut un serveur LiveReload intégré qui peut être utilisé pour déclencher une
actualisation du navigateur lorsqu’une ressource est modifiée.
©MAD
Initialisation
04
d’une App. SB
ApplicationRunner VS CommandLineRunner
› Si vous avez besoin d’exécuter du code spécifique une fois que SpringApplication a
démarré (par exemple, l’initialisation d’un répertoire de stockage ou d’une base de données),
vous pouvez implémenter l’interface ApplicationRunner ou CommandLineRunner.
› Les deux interfaces fonctionnent de manière similaire et fournissent une seule méthode
d’exécution, qui est appelée juste avant la fin de [Link](...).
› L’interface CommandLineRunner permet d’accéder aux arguments de l’application sous la
forme d’un simple tableau de chaînes, tandis qu’ApplicationRunner utilise l’interface
ApplicationArguments.
©MAD
Exemple d’utilisation de CommandLineRunner
En ajoutant l'annotation @Component à
une classe de Spring Boot à l’aide de,
elle devient candidate à la détection
automatique lors de l’utilisation de la
configuration basée sur les annotations et
de l’analyse du classpath. En général,
une classe annotée avec @Component
deviendra un bean au sein de
l’application
var-args:Permet aux appelants de cette méthode de spécifier plusieurs arguments du type
désigné, chaque argument étant un argument distinct.
©MAD
Logging dans
05
Spring Boot
Logging
› La journalisation (logging) est simplement compris comme « l’enregistrement » de traces lors
du fonctionnement des applications.
› Les traces comprennent :
Errors
Warnings
Autres informations
› Ces traces peuvent être affichées sur l’écran de la console ou enregistrées dans des fichiers
journaux (logs).
©MAD
Les traces de logging
› Lorsque vous exécutez l’application Spring Boot directement sur STS, vous pouvez voir les
traces de journalisation dans la fenêtre de la console. Ces traces indiquent l’état de
l’application et les erreurs qui se produisent lors de son exécution.
©MAD
Les bibliothèques de logging
› Il existe plusieurs bibliothèques de journalisation disponibles, telles que :
Logback
Log4j2
JUL (Java Util Logging)
› Spring Boot peut fonctionner avec toutes ces bibliothèques.
› Logback est intégré nativement dans Spring Boot via la dépendance spring-boot-starter.
©MAD
Exemple d’implémentation de la logback dans SB
Logback utilise SLF4J (Simple Logging
Facade for Java) comme interface.
Créez une instance Logger pour la classe MyBean à
l’aide de la méthode getLogger() de LoggerFactory.
Cela vous permet d’utiliser le Logger pour enregistrer
les traces.
©MAD
Les niveaux de logging
› En fonction de la gravité du problème, Logback divise les informations à enregistrer en cinq
niveaux, le plus bas étant TRACE et le plus sévère étant ERROR :
TRACE (niveau d’information ultra-fin)
DEBUG (informations détaillées pour le suivi de l’exécution du programme (identification et résolution des
anomalies potentielles))
INFO (informations essentielles sur le programme, suivi de l’exécution dans une perspective globale)
WARN (situation d’exécution non idéale (utilisation d’API obsolètes, ressource non critique manquante, etc.))
ERROR (situation d’erreur critique qui entraîne le blocage ou même l’arrêt du système (par exemple, problème de
connexion avec la base de données))
› Par défaut, Spring Boot n’enregistre que les informations dont le niveau de gravité est égal ou
supérieur à INFO.
©MAD
La configuration de logging
› Dans le fichier [Link], vous pouvez personnaliser diverses propriétés
pour configurer la journalisation de votre application Spring Boot.
› Voici quelques propriétés courantes qui peuvent être modifiées :
[Link].<logger-name>: Définit le niveau de journalisation d’un enregistreur (logger)
d’événements spécifique.
[Link]: Spécifie le nom et l’emplacement du fichier journal (log).
[Link]: Définit le modèle de sortie du journal (log) de la console.
[Link]: Définit le modèle de sortie de journal (log) dans un fichier log.
# Set the root logging level to WARN (only WARN and ERROR messages will be
› Exemple: logged)
[Link]=WARN
# Set the logging level for the Spring Web components to DEBUG
[Link]=DEBUG
# Set the logging level for Hibernate to ERROR
[Link]=ERROR
# Configure the log file location and name
©MAD [Link]=logs/[Link]
Spring Boot
06
Actuator
Spring Boot Actuator
› Spring Boot Actuator est un sous-projet de Spring Boot qui fournit des outils pour
surveiller et gérer les applications en production. Il offre une série de points de terminaison
(endpoints) prêts à l'emploi permettant d'obtenir des informations détaillées sur l'application,
telles que les métriques, l'état de santé (health checks), les informations système, les traces
HTTP, etc.
› Il utilise des endpoints HTTP et JMX pour gérer et surveiller l’application Spring Boot.
› Si nous voulons obtenir des fonctionnalités de surveillance et monitoring prêtes pour la
production dans une application, nous devons utiliser l’actionneur Spring Boot.
• Le point de terminaison JMX (Java Management Extensions) fait référence à la capacité
d’exposer des métriques, des statistiques et d’autres informations liées à la gestion via JMX.
• JMX est une technologie Java qui permet la surveillance et la gestion des applications Java.
©MAD
Les caractéristiques de Spring Boot Actuator(1/2)
› Il existe trois caractéristiques principales Spring Boot Actuator :
Endpoints
Metrics
Audit
› Endpoint: Les endpoints d’Actuator nous permettent de surveiller et d’interagir avec
l’application. Spring Boot fournit un certain nombre d’endpoints intégrés. Nous pouvons
également créer notre propre endpoint. Nous pouvons activer et désactiver chaque endpoint
individuellement. La plupart des applications choisissent HTTP, où l’ID du point de
terminaison, ainsi que le préfixe /actuator, sont mappés à une URL.
› Par exemple, le point de terminaison /health fournit les informations d’intégrité de base d’une
application. Par défaut, Actuator l’a mappé sur /actuator/health..
©MAD
Les caractéristiques de Spring Boot Actuator (2/2)
› Métriques : Spring Boot Actuator offre des métriques dimensionnelles en
s'intégrant avec Micrometer, une bibliothèque d'instrumentation intégrée à Spring
Boot. Micrometer permet de collecter des métriques d'application de manière
flexible vis-à-vis des fournisseurs. Il fournit des interfaces standardisées pour les
les compteurs, les minuteries de tâches longues, etc, le tout avec un modèle de
données dimensionnel. Cette intégration facilite le suivi et la surveillance des
applications Spring en fournissant des données précieuses pour l'analyse et
l'optimisation des performances.
› Audit : Spring Boot fournit un framework d’audit flexible qui publie les événements
dans un AuditEventRepository. Par exemple : Il publie automatiquement les
événements d’authentification si spring-security est en cours d’exécution.
©MAD
Activation de Spring Boot Actuator
› Nous pouvons activer Actuator en injectant la dépendance spring-boot-starter-actuator dans
le fichier [Link].
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
©MAD
Les Endpoints de Spring Boot Actuator (1/2)
› Les Endpoints d’Actuator nous permettent de surveiller et d’interagir avec notre application
Spring Boot.
› Spring Boot inclut un certain nombre d’endpoints intégrés et nous pouvons également
ajouter des endpoints personnalisés dans l’application Spring Boot.
› Le tableau suivant décrit les endpoints les plus utilisés :
Id Description
actuator It provides a hypermedia-based discovery page for the other endpoints.
health It is used to show application health information.
info It is used to return general information. It might be custom data, build
information or details about the latest commit.
loggers It is used to show and modify the configuration of loggers in the application.
metrics It is used to show metrics information for the current application.
©MAD beans It is used to display a complete list of all the Spring beans in your application.
Les Endpoints de Spring Boot Actuator (2/2)
› Pour Spring MVC, les endpoints supplémentaires suivants sont utilisés
Id Description
heapdump It is used to return a GZip compressed hprof heap dump file.
logfile It is used to return the contents of the logfile.
prometheus It is used to expose metrics in a format that can be scraped by a prometheus
server. It requires a dependency on micrometer-registry- prometheus.
©MAD
Activation des Endpoints
› Par défaut, tous les endpoints, à l’exception de /shutdown, sont activés. Pour configurer
l’activation d’un point de terminaison, utilisez la propriété [Link].
<id>.enabled.
› L’exemple suivant active l’endpoint /shutdown :
[Link]=true
[Link]
©MAD
Endpoint /actuator
› Par défaut, seul l’endpoint /health est exposé via HTTP et JMX.
› Étant donné que les endpoints peuvent contenir des informations sensibles, vous devez
réfléchir attentivement au moment de les exposer.
©MAD
Endpoint /actuator/health
› Cette réponse indique que l’application est dans un état de fonctionnement normal, car l’état
est déclaré comme « UP ».
› L’indicateur d’état d’ Actuator (HealthIndicator) évalue divers aspects de l’application pour
déterminer si elle est en bon état. Si tous ces aspects sont satisfaisants, le statut est déclaré
« UP ». Cela peut inclure la vérification de la base de données, de la connectivité réseau, de
l’état du disque, etc.
©MAD
Exposer les endpoints (1/2)
› Pour modifier les Endpoints exposés, utilisez les propriétés d’inclusion « include » et
d’exclusion « exclude » suivantes :
Property Default
[Link]
[Link] health
[Link]
[Link] health
La propriété include répertorie les ID des points de terminaison exposés.
La propriété exclude répertorie les ID des points de terminaison qui ne doivent pas être exposés.
La propriété exclude est prioritaire sur la propriété include.
Vous pouvez configurer les propriétés include et exclude à l’aide d’une liste d’ID de point de
terminaison.
©MAD
Exposer les endpoints (1/2)
› Par exemple, pour exposer uniquement les endpoints /health et /info sur JMX, utilisez la
propriété suivante :
[Link]=health,info
› Peut être utilisé pour sélectionner tous les endpoints. Par exemple, pour tout exposer via
HTTP à l’exception des edpoints env et beans, utilisez les propriétés suivantes :
[Link]=*
[Link]=env,beans
©MAD
Nouvelle réponse de /actuator
› Spring Boot ajoute un endpoint de
découverte qui renvoie des liens vers tous
les endpoints d’Actuator disponibles. Cela
facilitera la découverte des endpoints
d’Actuator et de leurs URL
correspondantes.
Avant de définir
[Link],
assurez-vous que les endpoints exposés ne
contiennent pas d’informations sensibles, qu’ils
ne sont pas sécurisés en les plaçant derrière un
pare-feu ou qu’ils sont sécurisés par quelque
chose comme Spring Security.
©MAD
Endpoint /actuator/metrics
©MAD
Endpoint /actuator/metrics/{name}
©MAD
Configuration des Endpoints
› Les endpoints mettent automatiquement en cache les réponses aux opérations de lecture qui
n’acceptent aucun paramètre.
› Pour configurer la durée pendant laquelle un endpoint met en cache une réponse, utilisez sa
propriété [Link]-to-live.
› L’exemple suivant définit la durée de vie du cache de l’endpoint /beans sur 10 secondes :
[Link]-to-live=10s
©MAD
Propriétés statiques dans /info
› Spring ajoutera automatiquement toutes les propriétés préfixées par info au point de
terminaison /info :
©MAD
07
Atelier 2