📘

Spring Boot

Spring est un framework proposant de trĂšs nombreuses fonctionnalitĂ©s (Web, SĂ©curitĂ©, batch, accĂšs aux donnĂ©es
) mais sa configuration peut s’avĂ©rer complexe et fastidieuse.

Sur le principe de “convention over configuration”, Spring Boot a Ă©tĂ© dĂ©veloppĂ© pour faciliter la configuration Spring grĂące Ă  :

On utilise des gestionnaires de dépendances (Gradle ou Maven).

On sélectionne des starters ou ensembles de dépendances regroupées par catégorie avec tout ce dont on a besoin : les dépendances (et leurs dépendances), la configuration par défaut, etc. Par exemple : Spring Web, Spring Boot Dev Tools, Jersey, Spring Data JPA


Les librairies nĂ©cessaires sont tĂ©lĂ©chargĂ©es et ajoutĂ©es au classpath. Selon ce qu’il y a dans le classpath, l’auto-configuration lance de maniĂšre automatisĂ©e les librairies prĂ©sentes (Tomcat embarquĂ©, bases de donnĂ©es
).

â„č
On ne fait plus que du Spring Boot maintenant.
⚙
Outils : ‱ Spring Tools : plugin pour les IDEs (Eclipse, Visual Studio, Atom IDE) ‱ Spring initializr : https://start.spring.io/ Ces deux outils sont dĂ©jĂ  inclus dans IntelliJ Ultimate.

Hello World


Projet GitHub : https://github.com/LSarribouette/springboot-basics/

Spring initializr = point d’entrĂ©e dans le projet, oĂč on choisit ce dont on a besoin.

  1. Depuis le site internet :

    > Gestionnaire de dépendances ? ici, Gradle Groovy

    (+) Pour l’instant, peu importe Gradle ou Maven ; peu importe Groovy ou Kotlin.

    > Langage ? ici, Java

    > Spring Boot ? ici, 2.7.9

    (+) La problématique des versions de dépendances est maintenant gérée par Spring Boot. On choisit une version de Spring Boot et il gÚre les versions des dépendances et leur migration potentielle.

    > Métadonnées ?

    • group (propriĂ©taire du projet et nom de domaine inversĂ©) = fr.lsarribouette
    • artifact (nom du projet) = springbootbasics
    • package name (un par dĂ©faut, que l’on peut changer) = fr.lsarribouette
    • packaging = jar

      (+) On n’utilise plus que le Tomcat intĂ©grĂ© pour rĂ©aliser des applications web, donc on n’a plus besoin du war.

    • java version = ici, 11

    > Dépendances ? ici, Spring Web, Thymeleaf, Spring Boot Dev Tools

    (+) C’est ici que l’on choisit ses starters. On peut ajouter le starter Spring Data JPA et une base de donnĂ©es comme H2 database.

    > Generate

    On obtient un zip, que l’on importe dans notre IDE.

  1. Dans IntelliJ,

    > New project > Spring initializr : mĂȘme dĂ©marche qu’en 1.

⚙
Outils : Lombok est une librairie qui simplifie la crĂ©ation et la gestion de mĂ©thodes basiques grĂące Ă  des annotations (ex : @toString, @setter, @getter,
). —> meilleure lisibilitĂ©, mieux pour les tests (pour 80% de couverture de code, on est content que la classe soit moins longue), tout se met Ă  jour lors de l’ajout d’un attribut. Il faut rajouter le plugin spĂ©cifique.

â„č
Rappel : Une classe de base = attributs privés + getter/setter + constructeurs (vide, full avec id, full sans id) + toString() + equals() + hashcode()

Pour ajouter une dépendance : mvnrepository (site central pour maven, gradle, Ivy
)

> on cherche celle qu’on veut

> on choisit sa version

> on choisit l’onglet de notre gestionnaire de dĂ©pendances

> on ajoute le code proposé dans le fichier de configuration approprié

> on clique sur le bouton pour recharger le projet

> la dépendance est téléchargée, ainsi que toutes ses dépendances à elle (et les leurs également)

Architecture du projet


On a maintenant un projet configuré selon les starters sélectionnés avec :

Le dossier main contient :

La classe d’exĂ©cution porte par dĂ©faut l’annotation @SpringBootApplication et la mĂ©thode run() qui permet de faire l’auto-configuration : tout ce qu’il nous fait est lancĂ© (comme le serveur Tomcat et une Ă©ventuelle base de donnĂ©es).

â„č
GrĂące aux starters, on a notamment les librairies : - Jakson qui gĂšre le mapping entre objets java et autres flux textes (json,xml
) - HikariCP qui permet d’utiliser un pool de connexion (demande au serveur d’application ou Ă  Spring de crĂ©er un conteneur avec des connexions vivantes vers la base) - Jakarta Persistence API (JPA), Hibernate, Tomcat embed (embarquĂ©), JAXB
 - plusieurs pour les tests

L’annotation @SpringBootApplication correspond en fait aux annotations :

@SpringBootConfiguration —> il indique que c’est une classe de configuration

@EnableAutoConfiguration —> il dĂ©marre ce qu’il faut en fonction de ce qui est fourni dans l’application

@ComponentScan —> (avec des paramùtres) il indique à Spring qu’il faut aller voir dans ce package et tous les sous-packages s’il y a des annotations (et les prendre en compte)

Lancement d’une application web

On lance l’application.

Sur un navigateur, on va sur http://localhost:8080/.

Ca fonctionne : on a une erreur 404 puisqu’on a pas de page, mais on se connecte bien à notre application.

Dans resources/static, on crĂ©e un fichier index.html statique que l’on complĂšte.

Ca fonctionne : on voit maintenant le index.html.