La traduction de l'article a été préparée spécialement pour les étudiants du cours "Developer on the Spring Framework" .
Le 16 octobre 2019, Spring Boot 2.2 est sorti!
Dans cet article, vous découvrirez les nombreux nouveaux goodies que la version 2.2 vous offre.
Maven
Pour commencer avec Spring Boot 2.2. Dans votre application, passez à la nouvelle version de
starter-parent .
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>your-very-cool-project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>your-very-cool-project</name> <description>Spring Boot 2.2 Project</description> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
Si vous démarrez l'application à partir de zéro, créez un projet Maven ou Grade à
start.spring.io !

Initialisation globale du bean paresseux
L'initialisation paresseuse des composants du bean est depuis longtemps prise en charge dans Spring Framework.
Le bean initialisé paresseusement indique au conteneur IoC d'instancier le bean à la première demande, et non au démarrage.
La nouvelle fonctionnalité introduite dans Spring Boot 2.2 prend en charge l'
initialisation paresseuse globale
des composants du bean (cette fonctionnalité est désactivée par défaut).
Que se passe-t-il lorsque vous activez l'initialisation globale du bean paresseux?
- L'initialisation de tous les beans Spring et de leurs dépendances sera retardée jusqu'à ce qu'ils soient nécessaires.
Pour réduire le temps de démarrage de l'application, vous pouvez désormais activer l'initialisation globale paresseuse des beans Spring dans les propriétés de configuration à l'aide de:
spring.main.lazy.initialization=true
ou pour la configuration yml:
spring: main: lazy-initialization: true
Y a-t-il des inconvénients à utiliser l'initialisation du bean paresseux? Bien sûr! Il est très important de comprendre les conséquences - vous ne devez pas inclure l'initialisation globale des composants du bean sans penser à cette solution! Il y a quelques compromis à considérer:
- Le traitement des requêtes HTTP peut prendre plus de temps pendant toute initialisation paresseuse. Les demandes ultérieures ne sont pas affectées.
- Les échecs qui se produisent généralement au démarrage (puisque les beans Spring et leurs dépendances sont créés lors de la création du contexte d'application) ne se produiront plus immédiatement. Ainsi, votre application ne produira plus de plantages évidents au démarrage! Résultat: votre client peut être le premier à rencontrer un problème (câblage du bean).
Si vous ne souhaitez pas activer l'initialisation
spring.main.lazy.initialization = false
du bean (
spring.main.lazy.initialization = false
) globalement, vous pouvez envisager de configurer l'initialisation
@Lazy
pour un composant spécifique à l'aide de l'annotation
@Lazy
.
D'un autre côté, il est également possible d'activer l'initialisation paresseuse des composants du bean (
spring.main.lazy.initialization = true
) au niveau global et de désactiver explicitement l'initialisation paresseuse pour un composant particulier.
Résumer:


JMX est désactivé par défaut
À partir de Spring Boot 2.2, JMX est désactivé par défaut. Cela permet de réduire le temps de démarrage des applications et de ne pas gaspiller une quantité importante de ressources lors de l'exécution. Si vous dépendez toujours de JMX, vous pouvez le réactiver:
spring.jmx.enabled=true
ou:
spring: jmx: enabled: true
Améliorations des propriétés de configuration
Spring Boot 2.2 est livré avec de belles améliorations pour les propriétés de configuration.
- Prise en charge de l'analyse des
@ConfigurationProperties
de @ConfigurationProperties
pour @ConfigurationProperties
- Liaison immuable
@ConfigurationProperties
Prise en charge de l' analyse des @ConfigurationProperties
de @ConfigurationProperties
pour @ConfigurationProperties
Spring Boot créera un bean pour chaque classe de configuration annotée avec
@ConfigurationProperties
détectée lors de l'analyse du
@ConfigurationProperties
classe. Ceci est une alternative à l'utilisation
- @EnableConfigurationProperties pour une classe qui lie une classe de propriétés
- ou en utilisant l'annotation
@Component
dans la classe de configuration pour en faire un bean.
Gardez à l'esprit que deux composants de bean peuvent être créés pour la classe de configuration, annotés avec
@Component
et
@ConfigurationProperties
. Dans de tels cas,
@Component
doit être supprimé de votre classe de configuration!
Liaison immuable @ConfigurationProperties
L'utilisation de la liaison des propriétés basées sur le constructeur prend désormais en charge les classes de propriétés de configuration immuables. Les
@ConfigurationProperties
basées sur le constructeur peuvent être activées en annotant la classe
@ConfigurationProperties
ou l'un de ses constructeurs avec
@ConstructorBinding
.
Par exemple:
package com.example.immutable.configuration.binding; import lombok.Getter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; @Getter @ConfigurationProperties("stock.quote.subscription") public class ImmutableStockQuoteSubscriptionProperties { private final String endpoint; private final String apiKey; private final SubscriptionType subscriptionType; private final boolean enabled; @ConstructorBinding public ImmutableStockQuoteSubscriptionProperties(String endpoint, String apiKey, SubscriptionType subscriptionType, boolean enabled) { this.endpoint = endpoint; this.apiKey = apiKey; this.subscriptionType = subscriptionType; this.enabled = enabled; } enum SubscriptionType { REALTIME, DELAYED, } }
propriétés dans mon application.yml:
stock: quote: subscription: endpoint: http:
Voir la
documentation pour plus de détails.
Modifications du point de terminaison de l'actionneur
Le point de terminaison
/actuator/health
modifié le format JSON résultant en renommant les
details
en
components
pour les
components
de premier niveau.
Le type de média de l'actionneur est passé de:
application/vnd.spring-boot.actuator.v2+json
à
application/vnd.spring-boot.actuator.v3+json
.
Exemple de réponse de point final
/actuator/health
avant Spring Boot 2.2 (Actuator V2):
{ "status": "UP", "details": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32597131264, "threshold": 10485760 } }, "ping": { "status": "UP" } } }
Réponse de point final
/actuator/health
Spring Boot 2.2 (Actuator V3):
{ "status": "UP", "components": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32605003776, "threshold": 10485760 } }, "ping": { "status": "UP" } } }
Votre boîte à outils peut dépendre du format V2 de l'actionneur de santé.
La santé de Spring Boot 2.2 est rétrocompatible avec la spécification de l'en-tête HTTP
Accept
: avec le type de support V2,
application/vnd.spring-boot.actuator.v2+json
Vous pouvez le faire vous-même en utilisant curl:
curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/health
Parallèlement à ce changement, il est désormais possible d'organiser
les indicateurs de performance en groupes .
Prise en charge RSocket
RSocket est un protocole de communication binaire utilisé pour transporter des flux d'octets. Il permet des modèles d'interaction symétriques grâce à la messagerie asynchrone sur un seul canal.
Parallèlement au nouveau démarreur pour RSocket, une configuration automatique étendue a été ajoutée.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-rsocket</artifactId> </dependency>
Pour plus d'informations, consultez la documentation
RSocket Spring Boot .
Prise en charge de Java 13
Java 13 est sorti le 17 septembre 2019.
Spring Framework 5.2 et Spring Boot 2.2 prennent désormais en charge Java 13.
Les versions 8 et 11 de Java LTS resteront compatibles avec Spring Boot 2.2.
Découverte de la plateforme cloud de Kubernetes
ConditionalOnCloudPlatform
détermine maintenant si votre application Spring Boot s'exécute dans Kubernetes.
package nl.jtim.spring.boot; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.stereotype.Service; @Service @ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) public class MyVeryCoolService { }
Bannières
Spring Boot est livré avec une bannière par défaut qui apparaît dans la console immédiatement après le démarrage de l'application.

C'est une fonctionnalité assez geek, mais Spring Boot prend déjà en charge les bannières personnalisées (animées).
À partir de Spring Boot 2.2, vous pouvez rendre votre bannière encore plus agréable:
- Les fichiers de bannière ASCII peuvent désormais utiliser des caractères de contrôle des couleurs ANSI 256 en utilisant {AnsiColor.NNN} (où NNN est le code couleur ).
- Maintenant, pour les bannières graphiques (animées), vous pouvez définir la propriété
spring.banner.image.bitdepth
sur 8
. Et la propriété spring.banner.image.pixelmode
en block
pour utiliser des caractères ASCII de bloc.
Le résultat ressemble à ceci:

Source:
https://github.com/spring-projects/spring-boot/wiki/images/animated-ascii-art-256.gifPour un exemple simple d'une bannière Spring Boot 2.2 animée améliorée, consultez
mon exemple Github .
Migration de Java EE vers Jakarta EE
Dans la mesure du possible, la commande Spring (Boot) est passée des dépendances Java EE avec un identifiant de groupe
javax
. Dépendances équivalentes de Jakarta EE avec l'ID de groupe
jakarta
dans les démarreurs Spring Boot.
De plus, la gestion des dépendances pour l'API de dépendance Jakarta EE a été ajoutée avec la gestion des dépendances existante pour l'API de dépendance Java EE.
Gardez à l'esprit que la gestion des dépendances de l'API Java EE sera supprimée dans les futures versions de Spring Boot et il est recommandé de commencer à utiliser les dépendances de l'API Jakarta EE.
Modifications des clés de configuration
Spring Boot 2.2 introduit de nombreuses nouvelles clés de configuration. Il existe également des clés obsolètes et supprimées. Il y a trop de changements pour les couvrir tous, mais voici quelques changements importants:
logging.file
été renommé
logging.file.name
logging.path
été renommé en
logging.file.path
Pour un aperçu complet de toutes les modifications, consultez
le journal des modifications de configuration de Spring Boot 2.2!Obsolète
Consultez les notes de publication pour une liste complète des
classes et propriétés obsolètes .
Quelques changements à noter:
- Prise en charge de Joda Time déconseillée au profit de
java.time
- Le client de transport Elasticsearch et le client Jest sont déconseillés au profit d'autres options telles que RestHighLevelClient et ReactiveElasticsearchClient, consultez la documentation pour plus de détails.
Mises à jour des dépendances
Spring Boot 2.2 est livré avec de nombreuses dépendances mises à jour.
Mises à jour Spring Dependency:Les mises à jour les plus importantes des autres dépendances:Tester la mise à jour des dépendances:Mise à niveau vers Spring Boot 2.2
Depuis le 1er août 2019, Spring Boot 1.x a
terminé son cycle de vie . Si vous utilisez toujours les applications Spring Boot 1.x, il est temps de mettre à niveau!
N'oubliez pas que les classes, méthodes et propriétés obsolètes dans Spring Boot 2.1 ont été supprimées dans Spring Boot 2.2. Assurez-vous de ne pas appeler de méthodes obsolètes avant la mise à niveau. Consultez
les notes de publication pour obsolète dans Spring Boot 2.1.
Vous pouvez trouver plus d'informations sur les liens suivants:
Cliquez sur + si vous avez trouvé cet article utile!
Des questions ou des commentaires?
Recherche sur Twitter:
@TimvanBaarsen