Spring Boot, un projet de l’éco-système Spring

Introduction

Spring boot est un nouveau projet de l’éco-système Spring.

Comme son nom l’indique, Spring boot permet de démarrer un projet Spring en simplifiant tous les aspects configuration qui sont habituellement rébarbatifs. Il a été conçu pour simplifier le travail du développeur utilisant Spring sans pour autant remettre en cause les fondements du framework.

Le framework Spring pouvait être considéré comme complexe à mettre en oeuvre, lourd (beaucoup de composants), avec des dépendances parfois mal maîtrisées, et, dans l’esprit, plutôt adapté à une utilisation sur des serveurs d’application.

Spring boot pour quel usage ?

Avec Spring boot, Pivotal s’inscrit dans la tendance de fond actuelle qui prône les microservices, par essence compactes, simples et peux chers à déployer sur les environnements cloud, ce que les serveurs d’application ont justement tendance à ne pas permettre. La simplicité de configuration et les options de déploiement permettent de répondre à ce besoin tout en ne cassant pas l’architecture Spring.

Spring boot s’adresse donc à tout développeur ou architecte souhaitant utiliser Spring dans ses projets. Sa philosophie fait qu’il est naturellement voué à être utilisé pour les nouveaux projets et le besoin de migrer un projet ancien vers Spring boot n’a pas forcément de sens.

Les principales fonctions

  • Une gestion des dépendances Spring simplifiée

La nouvelle gestion se fait ou bien en héritant d’un pom parent spring-boot, ou bien en créant son propre pom important le pom spring-boot. Ensuite, les dépendances sont intégrées via la notion d’atifacts “starter” qui contiennent un ensemble de dépendances techniques regroupées par fonction (ex: spring-boot-starter-data-elasticsearch, spring-boot-starter-integration, spring-boot-starter-security, spring-boot-starter-web …).
Cette manière de gérer les dépendances évite d’avoir des poms à rallonge tout en laissant Spring maintenir la cohérence des composants lors de ses montées de version.

  • Un déploiement facilité

Un plugin maven donne la possibilité de générer un jar exécutable facilement afin de faire de son application un microservice exécutable par une simple commande java.

  • De la configuration automatique

C’est une des principales fonctionnalité de Spring boot : Toute une configuration automatique existe par défaut dans le projet pour éviter au développeur d’avoir à faire des déclarations de configuration triviales. Quelques annotations sur la classe principale (@EnableAutoConfiguration par exemple) permettent d’utiliser cette configuration par défaut qui agit en fonction de la détection de la présence ou de l’absence de telle classe ou tel bean dans le projet.
Cet aspect est assez “magique” et il devient possible de créer un projet fonctionnel rapidement avec très peu de lignes de codes.
On sent bien que Spring tend à abandonner la configuration xml pour mettre en avant la configuration via classes java et Spring boot apporte encore des annotations supplémentaires évitant la redondance de certaines annotation.

  • De la configuration des propriétés externes plus lisible

Il est possible d’utiliser le format yaml dans les propriétés à injecter ce qui accroît la lisibilité de celles-ci.
De même le mapping entre fichier de configuration et classe java devient complètement transparent en utilisant une annotation @ConfigurationProperties

  • Des facilités pour créer des repositories

Il existe des starter gérant les dépendances pour mongodb, neo4j, elasticsearch, … ainsi que les configurations automatisées pour ces systèmes.
Faire un projet simple intégrant un service web securisé enregistrant des données dans une base mongodb devient très rapide et comporte très peu de déclarations.

  • Des possibilités de déclarer des sorties json multiples
  • L’exposition des ressources par REST juste avec une annotation

La configuration automatique inclue dans Spring Boot contient le minimum pour exposer une API RestFul rapidement

  • Un outil CLI (Command Line Interface) puissant

C’est une autre fonctionnalité majeure de Spring Boot afin de permettre du prototypage rapide d’application.
Le CLI permet d’exécuter des scripts Groovy en ligne de commande tout en bénéficiant des possibilités de configuration automatisée apportées par Spring Boot.
Exemple de création de serveur web via le CLI :

      • un script “web.groovy”

@Controller
class Example {
    @Autowired
    private MyService myService;
    @RequestMapping("/")
    @ResponseBody
    public String helloWorld() {
     return myService.sayWorld();
    }
}
@Service
class MyService {
    public String sayWorld() {
     return "World!";
    }
}
      • une commande CLI : > spring run web.groovy
  • Un module “actuator” dédié aux métriques de production

Ce module expose via une API Rest les élements d’autoconfiguration, les beans instanciés, les propriétés, les variables d’environnement, les métriques sur la JVM ou sur la santé du projet, la possibilité d’éteindre à distance l’application, la récupération de trace ou de dump … Il est possible d’étendre ou de restreindre au besoin les services exposés.
Ce module est particulièrement intéressant pour le déploiement en production où il permet de voir avec précision quelles sont les données utilisées par l’applicatif mais il permet aussi de détecter rapidement au cours du développement d’éventuels problèmes de configuration.

Conclusion

J’ai vraiment été convaincu par Spring Boot (et Spring 4 par la même occasion) qui apporte beaucoup de gains de productivité.

Le concept n’est pas de migrer un ancien projet vers Spring Boot ni d’imposer un carcan de dévéloppement mais plutôt d’utiliser Spring Boot et ses recommandations pour élaborer un projet Spring à partir de rien.

L’inconvénient principal de Spring Boot tient à son essence même: il masque énormément de configuration et donc ne permet pas toujours d’appréhender la manière dont il faut s’y prendre pour surcharger avec sa propre configuration. Il faut donc comprendre en premier lieu comment fonctionne Spring Boot (en n’hésitant pas à parcourir le code source et notamment le module spring-boot-autoconfigure) pour en tirer le meilleur parti.

Un projet en tête avec cette techno ?


Contactez-nous!

En parlez avec notre dev ?


Contactez-le !

Ce sujet vous intéresse ?

NOUS CONTACTER