Spring Boot 2 – Mon MicroService complet

Aujourd’hui, je vais vous parler de Spring Boot, en mettant en place un web service complet pour gérer des utilisateurs. Quand je désire construire un micro service, j’aime bien partir sur une structure comme celle-ci.
Spring Boot 2 vient de sortir en début d’année, j’ai voulu m’amuser un peu avec.
On va retrouver dans le project du Spring Boot 2.0, du Spring MVC, du Spring Data, du Spring Actuator et de l’Hibernate. J’ai rajouté aussi Swagger 2.
Ce code est plutot complexe avec pas mal de différente techno, je te conseille de regarder plutôt ces articles , , et  si tu ne maîtrises pas trop Spring.
Comme d’hab, tu peux retrouver tout le code via ce repository.

Configuration Maven

Ce projet est sous Maven. On retrouve les dépendances de Spring Boot déjà expliqué dans ce post, avec une version 2.0.0.RELEASE de Spring Boot. Le projet tourne avec Java 9.
On trouve aussi des dépendances de H2, qui sera notre base de donnée.
Il y a aussi une dépendance de JaxB. Cette librairie est neccessaire (actuellement) si on utilise Spring Boot 2 et Java 9.
J’ai rajouté aussi les dépendances de Swagger 2.

Configuration Spring

On trouve le fichier “application.properties” dans le dossier resources. C’est le fichier de configuration pour Spring Boot.
On retrouve la configuration pour la base de donnée H2, je rajoute mon chemin racine pour mes webservices Rest et de Spring Actuator, je détaillerai cela lors de la configuration Swagger.

Le Service User

On retrouve un web service “User”, avec sa couche façade, sa couche domaine/service et sa couche persistance. J’aime bien découpé les différentes couches de l’application, avec leurs objets “model” distincts. J’utilise un design de type assembler pour passer d’une couche à une autre.
Pour la couche persistence, on retrouve Spring Data avec le repository UserRepository.
Pour la couche facade, on trouve le Controller Rest UserSpringWebRestController. Il a pas mal d’annotation Swagger dans cette classe, expliqué dans le chapitre dédié à Swagger. Cet article explique comment marche un controller Rest.
On trouve une classe service “UserService” un peu de passe-plat pas très utile. Mais bon, je garde cette classe afin de préserver les responsabilités de chaque couche.
J’aime découper en Service layer, cela permet de structurer son code et d’éviter que tout se trouve tout en bordel dans le Controller. Tu pourrais me dire que ce n’est pas très utile pour un micro service et tu n’aurais peut être pas tord, c’est à débattre …

On teste cela avec la partie Front

Je te laisse lancer l’application via la classe Main SpringApplicationRunner. Des que l’application est lancé, Tu peux tester via du code front AngularJs avec l’url http://localhost:8080/angular/index.html.
Bon, il parait que AngularJs, c’est pour les ringards complètement dépassés, puisque cela a plus de 2 ans (ces technos JS qui changent tout le temps … :)). Donc pour faire plaisir à mes amis Dev Front, pour leur montrer que je ne suis pas si nul que ça coté Front, j’ai fait aussi une application Front en VueJs http://localhost:8080/vue/index.html.

Le Health Check

Un Health Check est un service pour savoir si le service est opérationnel, si ce service est up ou down. Dans le monde des micro service, le Health Check devient obligatoire afin de monitorer l’ensemble des microservices. Avec l’extension Spring Actuator, on permet embarquer un health automatiquement.
Par défaut, cette extension ouvre le service health et info. Dans la configuration Spring, j’ai changé le root de ces services Spring Actuator (la clé management.endpoints.web.base-path), du coup, pour tester, il faut utiliser l’url http://localhost:8080/manage/health. Le service health peut être personnalisable, mais je réserve cette partie pour un autre article …

Swagger 2

Swagger devient bien à la mode, je suis sur que tu en as déjà entendu parler. Tu peux définir une API de manière graphique très facilement. Ainsi, les informations des annotations Swagger se trouvant dans le controller UserSpringWebRestController vont se retrouver dans cette présentation graphique.
Pour tester ceci, tu peux lancer l’url http://localhost:8080/swagger-ui.html et tu retrouveras les appels Rest dans l’onglet “User”. Tu retrouve aussi l’appel health et info dans l’onglet “operation-handler”.
Si tu regardes la classe de configuration Swagger (SwaggerDocumentationConfig), j’ai mis en chemin visible, ceux se trouvant dans mon fichier de configuration Spring, les webservices Rest et les services de Spring Actuator.

Conclusion

Voila, on pourrait rajouter Spring Security pour être encore plus bien comme il faut, mais cela fait déjà pas mal. On pourrait aussi partir dans du Kotlin ou dans du Reactor 3, mais cela serait peut être pour un autre sujet …
Si tu as des questions, n’hésites pas à envoyer.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *