Nouvelle version de Spring Boot
Prêt pour les applications réactives dans le cloud

Le , par Logan Mauzaize, Rédacteur/Modérateur
Mise à jour le 01/03/2018 : Spring Boot 2.0 est officiellement disponible

L'équipe Spring vient d'annoncer la sortie officielle de Spring Boot 2.0. Cette version est l'aboutissement de 17 mois de travail et plus de 6800 commits faits par 215 personnes différentes. Ci-dessous, vous trouverez les principaux changements et nouveautés qui ont été introduits.


22/02/2018 : Depuis la sortie de Spring Boot en avril 2014, force est de constater que la promesse de simplifier et d'accélérer le développement de projets basés sur les briques Spring a été tenue.

Pour rappel, Spring Boot permet de faciliter la création d'applications basées sur Spring, prêtes pour la production avec le moins d'ennuis possible. Ceci est rendu grâce à la fourniture de plusieurs éléments :
  1. Une BOM de dépendances. Il s'agit d'une liste de versions de bibliothèques compatibles entre elles ;
  2. Des Starters. Il s'agit de dépendances permettant la configuration par défaut de certains composants (ex. : spring-boot-starter-web pour créer une application Web et spring-boot-starter-data-mongodb pour gérer une base de données MongoDB) ;
  3. Des AutoConfiguration qui définissent des configurations et des comportements par défaut (convention over configuration) mais qu'il est possible de remplacer ou surcharger via des conditions ;
  4. Des composants production ready tels que Actuator.

Ainsi il est possible de créer une application Web avec seulement une dépendance Maven et quelques classes. Le tout en assurant la production d'applications « Cloud ready ».

Parmi les changements majeurs, on notera :

Java >8

La version minimale est désormais Java 8. Les anciennes versions de Java ne sont plus supportées.

Bien entendu le support de Java 9 est également intégré.

Kotlin

Kotlin est sûrement LE langage alternatif du moment pour la JVM. Devenu officiellement l'un des langages pour les développements Android, il fait désormais son entrée dans l'écosystème Spring.

Code Kotlin : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
 
package com.example.demo 
 
import org.springframework.boot.autoconfigure.SpringBootApplication 
import org.springframework.boot.runApplication 
 
@SpringBootApplication 
class DemoApplication 
 
fun main(args: Array<String>) { 
    runApplication<DemoApplication>(*args) 
}

Pour les amateurs du déclaratif, il est également possible de définir ses endpoints via DSL plutôt que des annotations :

Code Kotlin : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
 
router { 
    ("/blog" and accept(TEXT_HTML)).nest { 
        GET("/", fooHandler::findAllView) 
        GET("/{slug}", fooHandler::findOneView) 
    } 
    ("/api/blog" and accept(APPLICATION_JSON)).nest { 
        GET("/", barHandler::findAll) 
        GET("/{id}", barHandler::findOne) 
    } 
}

Spring Framework 5.0

Ces dernières années ont vu l'explosion de la programmation réactive, et la dernière version majeure de Spring Framework n'y a pas manqué. Cette dernière intègre donc l'API Reactor Bismuth (reactor-core 3.1).

Ainsi la création de flux de type Server-sent events est grandement facilitée :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
  
@RestController 
public class MyController { 
    @GetMapping( path = "/ticks", produces = MediatType.TEXT_EVENT_STREAM_VALUE ) 
    public Flux<String> ticks() { 
        return Flux.internal(Duration.ofSeconds(2)); 
    } 
}

Ceci se traduit par l'arrivée du nouveau starter spring-boot-starter-webflux (basé sur Reactor Netty). Par conséquent, de nombreux starter basés sur le Web n'ont plus de dépendances explicites à spring-boot-starter-web afin de laisser libre le choix entre la stack classique et réactive.

Spring Data 2.0

La gestion des données n'est pas en reste, car elle a droit au même traitement de faveur. Tout du moins les API pour MongoDB, Redis et Cassandra avec l'arrivée des nouveaux starters, respectivement : spring-boot-starter-data-mongodb-reactive, spring-boot-starter-data-redis-reactive et spring-boot-starter-data-cassandra-reactive.

Code java : Sélectionner tout
1
2
3
4
5
6
  
public interface FooRepository extends Repository<Foo, String> { 
    Mono<Foo> findOne(String id); 
  
    Flux<Foo> findAll(); 
}

Gradle

Le plugin a été en grande partie réécrit afin notamment d'étendre les tâches standards existantes (et ainsi bénéficier de leurs options et comportements. La version minimum requise est désormais 4.x

Actuator

Le composant permettant de faciliter la surveillance et la gestion d'une application Spring Boot a subi une profonde refonte. Ainsi il est fortement recommandé d'utiliser la nouvelle dépendance spring-boot-starter-actuator (au lieu de spring-boot-actuator).

Par exemple :
  • remplacement des métriques spécifiques à Spring Boot par le support de Micrometer et des dimensional metrics ;
  • modification des formats des endpoints /application/env (#9864), /application/flyway (#9973), /application/liquibase (#9974), /application/health (#10249).


Sources
Spring Boot 2.0 Release Notes
Spring blog

Votre opinion
Que pensez-vous de Spring Boot ? Est-ce toujours justifié par rapport aux évolutions de Java EE ?
Allez-vous sauter le pas et passer à la programmation réactive ? À Kotlin ?

Voir aussi
Java 9 est disponible, la plateforme se met aux modules
Spring 5.0 M2 est disponible, le conteneur léger Java apporte un nouveau framework web fonctionnel
Oracle annonce la disponibilité générale de Java EE 8


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Gugelhupf Gugelhupf - Modérateur https://www.developpez.com
le 06/03/2018 à 11:58
Bonjour,

J'attendais cette version depuis un bout de temps, j'ai hate de tester cette nouvelle version de Sprint Boot avec Spring 5. Je vais surement utiliser les types Mono et Flux si je travaille avec Repository, mais pas sur que toutes les bases relationnelles soit compatibles avec ce concept. Sinon je ne suis pas fan de la syntaxe nodejs.

PS: C'est juste une impression ou il y a un puissant lobby qui se cache derrière Kotlin ?

A+
Avatar de Logan Mauzaize Logan Mauzaize - Rédacteur/Modérateur https://www.developpez.com
le 02/04/2018 à 21:09
Citation Envoyé par Gugelhupf  Voir le message
Je vais surement utiliser les types Mono et Flux si je travaille avec Repository, mais pas sur que toutes les bases relationnelles soit compatibles avec ce concept.

En fait, aucun SGBDR ne l'est. En tout cas pas via les drivers JDBC puisque l'API ne le supporte pas, et Spring Data JDBC/JPA sont basés dessus. Avec l'arrivée des briques bas-niveau de la programmation réactive dans Java 9 (Flow), on peut espérer que l'API JDBC finisse par offrir ce type de support.

Citation Envoyé par Gugelhupf  Voir le message
Sinon je ne suis pas fan de la syntaxe nodejs.

Je suppose que tu veux parler de la nouvelle API de déclaration des endpoints ? Je dois avouer que je suis pas un grand fan non plus mais ca se veut dans la nouvelle approche apportée. Il est possible de faire de même pour remplacer les @Configuration.

Je suppose que c'est pour plaire à ceux qui préfèrent les "scripts" aux "annotations".

Citation Envoyé par Gugelhupf  Voir le message
C'est juste une impression ou il y a un puissant lobby qui se cache derrière Kotlin ?

Pour faire simple, les dev Android ont été longtemps limités sur les versions de Java (langage et API) utilisables. Kotlin étant retrocompatible jusqu'à Java 6 cela a permis aux dev Android d'avoir accès à un langage moderne. Pour ceux qui ont de l'expérience avec Groovy, les langages sont très proches. Cependant Kotlin compile et est typé, ce qui permet d'être beaucoup plus productif.

Enfin dernier point, JetBrains oblige le tooling a très bien suivis. Il est même possible de l'utiliser en remplacement de Groovy pour Gradle.

Dans le cadre spécifiquement de Spring, Sébastien Deleuze (notamment) a milité pour un support "natif" dans Spring. Il faut avouer que le concept de "extension function" sont vraiment pas mal pour faciliter de l'intégration d'un framework tel que Spring et tous les autres librairies avec lesquelles il est susceptible de travailler.
Responsables bénévoles de la rubrique Spring : Mickael Baron - Robin56 -