1°/ Spring, Spring boot : kesako ?

Spring est un framework Java dont la première version est sortie en 2004. Cet environnement permet d’écrire des applications Java de tout type mais en suivant les principes J2E (Java Enterprise Edition). Son objectif premier est de faciliter la vie des développeurs car le J2E des origines était horriblement complexe à utiliser. Cependant, la "philosophie" derrière Spring reste relativement différente de la façon classique de construire une application Java. C'est pourquoi Spring reste compliqué à apprendre car il nécessite de connaître beaucoup de concepts et de nouvelles façons de structurer le code, et ce plus encore quand l'application doit interagir avec une base de données, ou bien quand il s'agit d'écrire un micro-service. Un point notable est que Spring nécessite d'écrire un nombre conséquents de fichier XML pour configurer tout un tas d'aspects d'une application, et que ces fichiers sont quasi illisibles pour quelqu'un ne connaissant pas Spring.

Spring Boot est sorti en 2014. Il est une surcouche de Spring qui simplifie de façon drastique l'écriture de micro-services. Spring boot n'est donc pas fait pour créer une application "sans serveur", mais pour justement créer le côté serveur. Par exemple, Spring Boot est particulièrement indiqué pour créer une API REST, mais il est tout aussi utile pour créer une API non REST, ou un serveur de page Web. L'énorme avantage est que Spring Boot ne nécessite pas de connaître Spring, et que le résultat est relativement compréhensible, même par un novice en Spring Boot. De plus, le volume de code à écrire est vraiment très faible, même si on le compare à son équivalent en nodejs. Cela vient essentiellement des annotations (par exemple @RestController) utilisées par Spring Boot, qui permettent soit de générer automatiquement un volume important de code lors de la compilation, soit de faire des tâches bien précises lors de l'exécution. Il y a également des principes de structuration du code et de nommage des classes/méthodes, qui réduisent encore le volume de code à écrire. L'inconvénient majeur est que l'on ne comprend pas forcément l'influence de telle ou telle annotation et pourquoi on doit créer tel ou tel fichier.

Pour résumé, quand on suit une procédure éprouvée pour créer son application, généralement tout va bien, mais dès que quelque chose plante, il compliqué de comprendre pourquoi sans une forte expertise de Spring Boot.

2°/ Premiers pas en Spring Boot

Sur le site de Spring, on trouve bon nombre de tutoriaux (https://spring.io/guides) permettant de découvrir Spring boot. La plupart sont facilement compréhensibles mais ils n'expliquent pas forcément la "logique" utilisée ou pourquoi on utilise telle ou telle annotation, structure de code etc. Ces guides sont donc une source d'exemples intéressante mais pas vraiment d'explications. D'autres sites proposent des ressources très intéressantes sur Spring Boot, souvent en relation avec d'autres frameworks, ou bien dans un contexte précis comme par exemple Spring Boot+MongoDb. On peut citer entre autres :

<aside> ☝ A noter : les deux sites mentionnés ci-dessus, on trouve également pas mal d'articles avec des explications sur certaines classes, annotations, ... de Spring Boot. Ils sont donc souvent plus intéressants que les guides du site Spring, à condition de farfouiller !

</aside>

L'archive du projet contenant les démonstrations qui suivent peut être téléchargé [ ici ]

springboot-td1-src.tgz

2.1°/ API Hello world

L'objectif de ce premier exemple est de créer une API très simple avec 2 routes, dont une avec paramètre :

Pour créer un projet Spring Boot, le plus simple est de faire comme dans les guide : obtenir un squelette de projet via le site Spring Initializr : https://start.spring.io/. On peut générer et télécharger une archive zip contenant tout ce qu'il faut pour commencer le projet en précisant le langage (Java, Kotlin, Groovy), le gestionnaire de projet voulu (gradle, maven), et d'autres paramètres de version (Spring, Java, ...). Le seul problème est de choisir les dépendances nécessaires au projet.

Quand on veut créer une API REST, il faut au moins sélectionner "Spring Web" comme dépendance. Si cette API doit être en relation avec une base de données, d'autres dépendances sont nécessaires, comme montré dans la sections suivante.

La figure 1 ci-dessous montre l'état de la fenêtre pour créer le projet qui sert de démonstration 1.

Figure 1 : sélection des paramètres (Java + maven +  Spring Web) de la démonstration 1 sur Spring Initializr

Figure 1 : sélection des paramètres (Java + maven +  Spring Web) de la démonstration 1 sur Spring Initializr

On remarque dans la description de la dépendance "Spring Web" qu'elle repose sur Spring MVC et Tomcat. Le premier représente simplement le module de développement d'application Web de Spring. Il contient les classes, annotations, et mécanismes d'exécution basiques pour toute application web Spring. Cependant, il faut pouvoir "servir" le résultat via un serveur HTTP et c'est le rôle de Tomcat qui est en gros un serveur Web sachant interpréter/exécuter du Java.