SpringBoot 3.0 : Le Saint Graal
SpringBoot 3.0 (avec Spring 6.0) est passé en disponibilité générale le 24 novembre de l'année dernière. Depuis que je suis de retour dans le monde du printemps, cela mérite un suivi approprié de ma part.
Voici toutes les choses incroyables qui ont été incluses :
- Base de référence Jakarta EE 9+ et Java 17
- Détails du problème RFC
- Observabilité
- AOT et GraalVM
- Client pour API Web
Donc, pour passer à Spring Boot 3.0, la configuration minimale requise est JDK 17. JDK 17 est la version LTS et existe depuis près d'un an et demi. de Java. Si vous n'avez pas encore effectué la mise à jour, voici un guide qui pourrait vous aider.
En ce qui concerne Jakarta, les noms des packages ont été modifiés de javax.* à jakarta.* , vous devrez donc les renommer .
Une autre chose intéressante est que ces changements ne sont pas sortis de nulle part. La décision de mettre à niveau la ligne de base a été annoncée il y a deux ans. Pour une chronologie plus détaillée, vous pouvez écouter les dix premières minutes de la conférence de Stéphane Nicoll et Brian Clozel . Je recommanderais fortement d'écouter tout le discours si vous avez le temps.
Détails du problème RFC
Ainsi, vous savez comment vous géreriez les exceptions personnalisées avec @ControllerAdvicel'endroit où vous auriez vos messages personnalisés enveloppés dans un fichier ResponseEntity. C'est un processus fastidieux et vous devez encore déterminer à quoi votre message devrait ressembler. Imaginez si le message était standardisé mais que vous pouviez toujours l'étendre. Bienvenue dans la RFC sur les détails du problème . SpringBoot 3.0 fournit une ProblemDetailclasse pour faire le tour.
Avec des conseils de contrôleur simples ci-dessous :
Vous pouvez créer un ProblemDetail qui, lorsqu'il est renvoyé par votre application, ressemble à :
La grande chose est que si vous avez besoin de champs supplémentaires, vous pouvez étendre ProblemDetail.
Par exemple, si vous souhaitez retourner un solde actuel qui n'est pas suffisant pour effectuer un achat, vous pouvez ajouter ce champ supplémentaire.
Voici une courte explication pour chaque champ de la RFC :
Observabilité
Évidemment, lorsque vous écrivez du code, vous aimeriez savoir en production quand quelque chose cesse de fonctionner ou est lent pour une raison quelconque. Vous ne voulez pas vraiment que vos utilisateurs vous le disent. L'observabilité est un sujet distinct et énorme, mais Spring Boot 3.0 est allé dans cette direction.
Il avait déjà Actuator et vous pouviez utiliser Micrometer (un peu séparément). Dans Spring Boot 3.0, le micromètre est intégré à Spring Boot.
L'API d'observation unifiée prend en charge les métriques et le traçage.
Ci-dessous un exemple simple UserController:
Dans cet exemple, nous créons une métrique simple users.find.
La méthode observe est en fait une minuterie qui mesurera le temps d'exécution de tout ce qui est passé à l'intérieur.
Vous pouvez vérifier la métrique via Actuator. Il ressemble à ceci par défaut :
Ici, vous pouvez voir les mesures du temps d'exécution avec les balises disponibles comme une erreur et notre IllegalArgumentExceptionlorsque l'utilisateur n'est pas trouvé.
Il y a beaucoup plus à couvrir ici, mais disons simplement que vous n'avez même pas besoin de le déclarer comme ça sur chaque contrôleur, vous pouvez le configurer de manière à ce que chaque contrôleur soit automatiquement observé.
AOT et GraalVM
Qu'est-ce que GraalVM ?
Cela a commencé comme un projet pour avoir une machine virtuelle qui les aimerait toutes (langues). L'idée était d'avoir une machine virtuelle prenant en charge toutes les langues et disposant de la même infrastructure. L'idée était autour de la diversité linguistique qui existait à l'époque et aujourd'hui.
Avec la prise en charge multilingue, vous pouvez essentiellement avoir une application Java dans GraalVM qui est intégrée dans Node.js.
Outre la prise en charge multilingue, d'autres objectifs sont de faire fonctionner les programmes/codes plus efficacement et de rendre les développeurs plus productifs.
Ce que nous allons avoir ici dans notre exemple est un binaire autonome natif compilé avec le compilateur GraalVM Ahead of Time qui est de petite taille et super rapide au démarrage. Avec le compilateur Ahead of Time, les choses au démarrage sont plus rapides car elles ont déjà été faites dans la phase de compilation.
Qu'est-ce qu'AOT dans Spring Boot ?
AOT signifie compilation anticipée. C'est juste une étape supplémentaire lors de la création de l'application.
Pas
- Compiler le code
- Créez une application optimisée prête pour GraalVM
Pour une explication détaillée de ce qui est construit dans l'étape AOT, vous pouvez consulter la discussion déjà mentionnée .
Pour essayer vous-même :
- Cloner le projet depuis github
- Avec Maven, vous pouvez exécuter
mvn -Pnative spring-boot:build-image - Une fois l'image créée, vous pouvez exécuter l'image docker avec
docker run--rm -p 8080:8080 docker.io/library/demo:0.0.1-SNAPSHOT
Vous pouvez en savoir plus sur le fonctionnement de l'AOT ici .
La dernière chose à ajouter ici est que certaines choses ne sont pas prises en charge par défaut et nécessitent une configuration manuelle pour fonctionner. Je m'attends à ce que cela s'améliore avec le temps. L'une de ces choses est le client pour l'API Web.
Client pour API Web
Le dernier mais non le moindre est Clientpour appeler les points de terminaison de repos.
Cela semble assez génial si vous me demandez. Rappelle beaucoup comment nous utilisons JpaRepositories.
Afin de transformer cela en image native Graal, nous avons besoin d'une configuration manuelle en raison de la façon dont UsersClientil est créé. Il utilise un proxy pour créer l'implémentation de l'interface au moment de l'exécution alors que GraalVM est très restrictif sur ce qui peut être fait au moment de l'exécution. Fondamentalement, nous devons créer un indice pour la compilation AOT.
Malheureusement, même avec les changements d'indice, je n'ai pas réussi à le faire fonctionner en raison de l'échec de la compilation AOT pour certaines utilisations (non miennes) de l'enregistreur de journalisation. J'ai laissé le code si quelqu'un veut le vérifier .
Même si cela a fonctionné, je pense que ces conseils manuels sont fastidieux et doivent être faits automatiquement, ce qui, je pense, sera ajouté à un moment donné.
Voici les liens GitHub backend et client pour que vous puissiez essayer les fonctionnalités intéressantes de Spring Boot 3.0.
Bon codage !
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































