Retour aux articles

Migrer vers Spring Boot 3.x et Java 21 : Un guide pratique pour les développeurs

Migrer vers Spring Boot 3.x et Java 21 : Un guide pratique pour les développeurs | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular

Migrer vers Spring Boot 3.x et Java 21 : Un guide pratique pour les développeurs

La migration vers Spring Boot 3.x combinée à Java 21 est une opportunité pour moderniser votre stack, améliorer les performances et préparer les applications aux possibilités AOT/native. Ce guide fournit une approche pragmatique : préparation, changements techniques courants, exemples de configuration et conseils pour tester et valider la migration.

Prérequis et considérations initiales

Vérifiez les versions minimales : Spring Boot 3.x nécessite Spring Framework 6 et au minimum Java 17, mais l'objectif ici est Java 21 pour tirer parti des améliorations récentes. Confirmez la compatibilité de vos dépendances tierces (bibliothèques, pilotes JDBC, frameworks de sécurité, etc.).

Attention aux namespaces Jakarta : Spring Boot 3 migre vers Jakarta EE 9+, ce qui implique le renommage des packages javax.* vers jakarta.*. Cette transition est souvent la source majeure de corrections lors de la migration.

Étape 1 — Analyse du projet

Inventoriez les dépendances et repérez les usages de javax.*, API obsolètes, plugins de build ou binaires natifs. Utilisez des outils comme jdeps pour détecter les dépendances vers des API internes du JDK et pour valider la compatibilité Java 21.

Étape 2 — Mise à jour de l’environnement de build

Exemples de changements Maven : mettez à jour le parent et la propriété Java.

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.0</version> <!-- exemple --> </parent> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> </properties>

Pour Gradle avec toolchains :

java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } plugins { id 'org.springframework.boot' version '3.1.0' }

Étape 3 — Remplacer les packages Jakarta

Automatisez la conversion des imports javax.* vers jakarta.* quand c’est possible. Le projet Spring Boot Migrator (SBM) peut aider à détecter et appliquer des changements récurrents. Exemple manuel :

// Avant import javax.persistence.Entity; import javax.persistence.Id; // Après import jakarta.persistence.Entity; import jakarta.persistence.Id;

Note : La base de données et le dialecte Hibernate peuvent aussi nécessiter des versions compatibles Jakarta.

Étape 4 — Mettre à jour Spring Security, Spring Data et autres modules

Spring Security 6 et Spring Data compatibles avec Spring Boot 3 changent parfois des signatures et comportements. Validez les configurations d’authentification, les filtres et la configuration WebFlux/WebMVC. Les tests d’intégration doivent être exécutés dès que possible pour détecter les régressions.

Étape 5 — Ajustements de configuration et propriété

Vérifiez les fichiers application.properties / application.yml : certains noms de propriétés ont été rationalisés ou déplacés. Inspectez les endpoints Actuator (expositions, security) et adaptez les règles de management.

Étape 6 — Tests et validation

Exécutez l’intégralité de votre suite de tests (unitaires et d’intégration). Mettez à jour JUnit, Mockito et autres frameworks de test si nécessaire. Pour les tests d’intégration, utilisez des profiles et conteneurs Docker pour reproduire l’environnement de production.

Astuce : exécutez les builds CI avec JDK 21 et isolez les échecs liés à la plateforme (par ex. warnings de dépréciation transformés en erreurs selon les options du compilateur).

Étape 7 — Profiter de Java 21

Java 21 apporte des optimisations JVM, des améliorations de langage et des APIs modernes. Après stabilisation de la migration, introduisez graduellement des fonctionnalités comme les records, pattern matching et, si approprié, les threads virtuels/structured concurrency (en respectant le statut des API en preview/ incubateur).

Outils utiles

- Spring Boot Migrator (SBM) pour migration automatisée des imports et patterns courants.
- jdeps pour l’analyse de compatibilité Java.
- Dependabot / Renovate pour automatiser les mises à jour de dépendances.
- CI pipelines (GitHub Actions, GitLab CI, Jenkins) pour valider les builds sur JDK 21.

Conseils pratiques et pièges fréquents

- Tiers non compatibles : certains jars tiers peuvent ne pas être encore portés vers Jakarta ; planifiez des alternatives ou maintenez des shims.

- Sérialisation et contrat API : le renommage des packages peut casser la sérialisation Java native ou les clients RPC ; testez les contrats externes.

- AOT / Native : Spring Boot 3 facilite la création d’artefacts AOT. Cependant, pour une native image, vérifiez la compatibilité avec GraalVM et ajustez les configurations de réflexion.

Plan de rollback et stratégie de déploiement

Déployez d’abord sur un environnement de staging identique à la production. Utilisez des déploiements canary/blue-green et métriques pour détecter les régressions. Préparez un plan de rollback clair avec snapshots de base de données ou mécanismes de migration réversibles si nécessaire.

Conclusion

La migration vers Spring Boot 3.x et Java 21 est un projet d’envergure mais très bénéfique : sécurité, performance et modernité. En suivant une approche itérative — audit, mises à jour de dépendances, remplacement des packages Jakarta, tests intensifs et déploiement progressif — vous limitez les risques et maximisez les bénéfices.

À propos de l'expert

Laty Gueye Samba est un développeur full stack basé à Dakar, passionné par l'architecture logicielle. Spécialiste des écosystèmes Java (Spring Boot) et Angular.