Les sources des exemples de cet article sont disponible sur github.
Prérequis
Connaissances maven de base.
Connaissances Spring de base et configuration par annotation.
Connaissances Hibernate de base.
Présentation
Pourquoi Spring Boot ?
J’ai personnellement découvert le framework Spring très tardivement dans ma carrière en 2011. Heureusement pour moi, je n’ai pas vécu le traumatisme auquel beaucoup de collègues ont étés confrontés, des kilomètres et des kilomètres de fichiers XML de configuration de beans. Je suis donc issue de la génération boulimique des annotations Java (petit clin d’oeil à @annotatiomania. Cette approche n’est peut-être pas parfaite, mais elle a le mérite en mon sens de rendre la configuration de projet moins verbeuse. Malgré tout, un problèmes persiste avec Spring. A chaque nouveau projet, nous n’échappons jamais à cette phase ou il est nécessaire de déclarer tous les beans utilitaires que l’on se doit de connaitre par coeur pour utiliser chacune parties de Spring requises par notre projet.
Spring Boot répond à cette problématique en apportant le patron de conception COC (Covention Over Configuration). Concrètement, il vous aidera à construire des applications le plus rapidement possible sans avoir à répéter des déclarations ou des configurations de beans que vous êtes susceptible de répéter de projet en projet.
Voici les principales caractéristiques :
Fourni des beans pré configuré pour chacun des modules Spring nécessaire à votre application.
Approche de configuration opiniâtre pour les composants mais facile à surcharger pour un comportement personnalisé.
Aucune génération de code ou de configuration XML.
Package facilement votre application sous un jar exécutable depuis la commande
java -jar
ou sous un war conventionnel.
Les avantages de Spring Boot ?
Evite la déclaration à répétition de beans incontournable de projets en projets.
Permet de démarrer un projet très rapidement et de se concentrer sur les besoins métiers.
Le packaging de Spring Boot uniformise le déploiement de l’application pour tous les environments (pas de conteneur JEE obligatoire).
Tous les tutoriaux officiels de Spring sont maintenant basé sur Spring Boot (vous n’y échapperez pas !).
Mécanisme d’AutoConfiguration qui permet de partager sur plusieurs projet l’instanciation de beans réutilisable.
Modules Spring supportés
Chaque des modules Spring Boot supporté proposent un mécanisme de configuration des beans automatique pour d130 Voici la liste des modules Spring supportés en version Spring Boot 1.3.0 :
NOM DESCRIPTION spring-boot-starter-actuator Module de monitoring pour la surveillance de l’application. spring-boot-starter-amqp Support pour ‘Advanced Message Queuing Protocol’ via spring-rabbit. spring-boot-starter-aop Support pour la programmation orienté par aspect avec spring-aop et AspectJ. spring-boot-starter-artemis Support pour “Java Message Service API” via Apache Artemis. spring-boot-starter-batch Support pour ‘Spring Batch’ includant la base de donnée HSQLDB. spring-boot-starter-cache Support d’abstraction pour Spring’s Cache. spring-boot-starter-cloud-connectors Support pour ‘Spring Cloud Connectors’ qui simplifient la connection à des platformes Cloud comme Cloud Foundry et Heroku. spring-boot-starter-data-elasticsearch Support pour le moteur de recherche et d’analytique en incluant spring-data-elasticsearch. spring-boot-starter-data-gemfire Support pour le store distribué GemFire en incluant spring-data-gemfire. spring-boot-starter-data-jpa Support pour “Java Persistence API” en incluant spring-data-jpa, spring-orm and Hibernate. spring-boot-starter-data-mongodb Support pour la base de données NoSQL MongoDB en incluant spring-data-mongodb. spring-boot-starter-data-rest Support pour exposer des repositories Spring Data en REST via spring-data-rest-webmvc. spring-boot-starter-data-solr Support pour le moeteur de recherche Apache Solr en incluant spring-data-solr. spring-boot-starter-freemarker Support pour le moteur de templating FreeMarker. spring-boot-starter-groovy-templates Support pour le moteur de templating Groovy. spring-boot-starter-hateoas Support pour services web HATEOAS RESTful via spring-hateoas. spring-boot-starter-hornetq Support pour “Java Message Service API” via HornetQ. spring-boot-starter-integration Support pour les modules communs de spring-integration. spring-boot-starter-jdbc Support pour les bases de données avec JDBC. spring-boot-starter-jersey Support pour le framework de services web RESTful Jersey. spring-boot-starter-jta-atomikos Support pour transactions distribuées JTA via Atomikos. spring-boot-starter-jta-bitronix Support pour transactions distribuées JTA via Bitronix. spring-boot-starter-mail Support pour javax.mail. spring-boot-starter-mobile Support pour spring-mobile. spring-boot-starter-mustache Support pour le moteur de template Mustache. spring-boot-starter-redis Support pour le store de données clé/valeur REDIS en incluant spring-redis. spring-boot-starter-security Support pour spring-security. spring-boot-starter-social-facebook Support pour spring-social-facebook. spring-boot-starter-social-linkedin Support pour spring-social-linkedin. spring-boot-starter-social-twitter Support pour spring-social-twitter. spring-boot-starter-test Support pour les différentes dépendences de tests unitaire en incluant JUnit, Hamcrest and Mockito ainsi que spring-test module. spring-boot-starter-thymeleaf Support pour le moteur de templating Thymeleaf. spring-boot-starter-velocity Support pour le moteur de templating Velocity. spring-boot-starter-web Support for développement de la pile web complête en incluant Tomcat et spring-webmvc. spring-boot-starter-websocket Support pour le développement WebSocket. spring-boot-starter-ws Support pour Spring Web Services.
Concepts Clés
Configuration projet
Hériter de starter parent
Déclarer le starter parent pour faciliter la déclaration des dépendences de Spring Boot pour votre projet.
Ensuite il faut sélectionner les composants Spring Boot pour les modules Spring requis pour notre application. Dans notre exemple, nous construirons une webapp simple qui sert du contenu localisé dans l’arborescence classpath:./.
Le fonctionnalités principales de Spring Boot seront disponible à l’application déclarant en dépendances n’importe quel module starter de Spring Boot.
Amorcer votre application
Spring Boot fonctionne principalement par annotation. au grand désarroi de ceux qui tiennent toujours à la configuration Spring par fichiers XML.
Démarrer une application avec Spring Boot nécessite d’exécuter la méthode statique org.springframework.boot.SpringApplication.run(…) depuis n’importe quel endroit. Mon conseil est de déclarer l’appel depuis la méthode statique main de votre application. Ainsi vous pourrez démarrer votre application avec la commande java -jar
.
SpringApplication.run(…) prend comme argument une classe. Spring Boot recherchera les annotations java parmi celle-ci. Comme il retrouve l’annotation @SpringBootApplication, un AnnotationConfigEmbeddedWebApplicationContext sera instancié. Ce conteneur Spring sera peuplé par tous les beans auto configurés fourni par le module Spring Boot que vous aurez mis en dépendences ainsi que tout ceux déclaré par annotation dans le package de la classe passé en paramètre (.invivoo.springboot.keyconcepts).
Voici la sortie de console du lancement de la méthode main ci dessus :
Vous avez maintenant un Tomcat embarqué écoutant le port 8080. Toutes ressources situé dans classpath:./ sera disponible à l’url http://localhost:8080/* (ex : http://localhost:8080/hello-world.html).
Packager votre application
Spring Boot fourni un plugin maven qui permettra d’ajouter toutes les dépendances de votre projet ainsi que la configuration nécessaire afin que le jar final produit lors de la séquence maven package soit exécutable en autonome.
Ajouter la déclaration de plugin suivante à votre pom.xml
:
Builder votre application avec maven.
Exécuter le jar produit.
La suite
Dans le prochain article, nous irons plus loin en implémentant un microservice RESTfull sécurisé avec un minimum de configuration.