Quoi de neuf dans Spring Boot 2.2?

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 { /** * Real time stock quotes */ REALTIME, /** * Stock quotes that are delayed by 15 minutes */ DELAYED, } } 


propriétés dans mon application.yml:

 stock: quote: subscription: endpoint: http://stockgeeks.io/api enabled: true apiKey: secret subscriptionType: realtime 


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.gif

Pour 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

Source: https://habr.com/ru/post/fr475384/


All Articles