[{"data":1,"prerenderedAt":850},["ShallowReactive",2],{"blog-post-\u002Fblogs\u002F2026-06-08-rex-montee-de-version-spring-boot-4-et-ses-dependances":3,"related-\u002Fblogs\u002F2026-06-08-rex-montee-de-version-spring-boot-4-et-ses-dependances":816},{"id":4,"title":5,"alt":6,"authors":7,"body":15,"date":788,"description":789,"extension":790,"image":791,"meta":792,"navigation":793,"ogImage":791,"path":794,"published":793,"reviewers":795,"seo":808,"stem":809,"tags":810,"__hash__":815},"blogs\u002Fblogs\u002F2026-06-08-rex-montee-de-version-spring-boot-4-et-ses-dependances\u002Findex.md","REX: Montée de version Spring Boot 4 (et ses dépendances)","Logo de Spring Boot",[8],{"id":9,"name":10,"image":11,"linkedin":12,"x":13,"bio":14},"67adfd77-4b84-4496-b55d-3391541f59c5","Michaël Bernasinski",".\u002Fassets\u002Fauthor-michael-bernasinski.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fmichael-bernasinski",null,"Principal Lead - Software Engineer - HoppR Lyon",{"type":16,"value":17,"toc":774},"minimark",[18,22,25,30,47,50,53,57,72,81,103,106,111,114,117,182,189,197,200,212,216,234,237,245,249,252,255,263,267,274,283,286,290,297,300,315,341,354,356,365,421,424,506,516,519,536,545,564,566,569,689,693,696,704,707,711,717,723,729,735,741,747,753,759,765,770],[19,20,21],"p",{},"Dans le cadre d’un projet que j’ai accompagné en tant que lead developer, j’ai eu l’occasion d’effectuer une migration de Spring Boot 3.5 vers Spring Boot 4.",[19,23,24],{},"Je vous partage aujourd’hui mon retour d’expérience avec cet article. L’article que j’aurais aimé trouver pour me faciliter ce chantier. J’espère qu’il pourra vous aider vous aussi à l’entreprendre.",[26,27,29],"h2",{"id":28},"avant-de-commencer-quest-ce-que-spring-boot","Avant de commencer, qu’est-ce que Spring Boot ?",[19,31,32,33,40,41,46],{},"Petit rappel rapide : ",[34,35,39],"a",{"href":36,"rel":37},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot",[38],"nofollow","Spring Boot"," est un framework open source basé sur Java, conçu en 2014 pour simplifier au maximum le développement d’applications. Il fait partie de l’écosystème ",[34,42,45],{"href":43,"rel":44},"https:\u002F\u002Fspring.io\u002F",[38],"Spring",", que l’on retrouve dans de nombreuses applications d’entreprise.",[19,48,49],{},"Spring Boot permet de développer rapidement des applications web, des APIs REST ou des microservices rapidement. L’idée est d’abstraire au maximum la complexité technique pour se concentrer sur la logique métier. Il comprend de nombreuses dépendances utiles et un serveur intégré.",[19,51,52],{},"On peut ainsi voir Spring Boot comme un kit clé en main pour lancer un projet Java.",[26,54,56],{"id":55},"quy-a-t-il-de-nouveau","Qu’y a-t-il de nouveau ?",[19,58,59,60,65,66,71],{},"Après plusieurs années sur une version 3 qui finira par évoluer jusqu’au 3.5, une ",[34,61,64],{"href":62,"rel":63},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Freleases\u002Ftag\u002Fv4.0.0",[38],"release 4.0.0 apparaît fin Novembre",". En voici la ",[34,67,70],{"href":68,"rel":69},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-4.0-Release-Notes",[38],"release note complète",".",[19,73,74,75,80],{},"Spring Boot 4 porte une ",[34,76,79],{"href":77,"rel":78},"https:\u002F\u002Fwww.lepoint.fr\u002Feconomie\u002Flia-bientot-a-lorigine-dune-vague-de-burn-out-sans-precedent-VHYWG57EQZEBVNVTMHUCAUZBCI\u002F",[38],"montée de version de nombreuses dépendances",". Bien entendu, cela comprend les différentes dépendances Spring (Spring Framework 7, Spring Batch 6, Spring Security 7, etc.) mais aussi de dépendances tierces. On peut citer notamment :",[82,83,84,88,91,94,97,100],"ul",{},[85,86,87],"li",{},"Jackson 3",[85,89,90],{},"Jakarta Persistence (JPA) 3.2",[85,92,93],{},"Hibernate 7",[85,95,96],{},"Liquibase 5",[85,98,99],{},"JUnit 6",[85,101,102],{},"Tomcat 11",[19,104,105],{},"Il y en a de nombreuses autres listées, mais celles-ci sont probablement les plus connues et utilisées, notamment dans le projet dont je vous parle plus loin dans cet article.",[107,108,110],"h3",{"id":109},"pourquoi-faire-la-bascule","Pourquoi faire la bascule ?",[19,112,113],{},"Après tout, ça fonctionne ! Pourquoi avons-nous fait cette upgrade ?",[19,115,116],{},"Voici quelques raisons qui devraient vous y faire réfléchir si vous n’êtes pas encore convaincu·e :",[82,118,119,132,143,154,160,171],{},[85,120,121,125,126,131],{},[122,123,124],"strong",{},"Compatibilité avec Java 21+"," : Support natif des dernières fonctionnalités de Java, comme les ",[34,127,130],{"href":128,"rel":129},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fjava\u002Fjavase\u002F21\u002Fcore\u002Fvirtual-threads.html",[38],"Virtual Threads"," pour une meilleure gestion de la concurrence.",[85,133,134,137,138,142],{},[122,135,136],{},"Jakarta EE 11"," : Alignement complet avec les dernières spécifications Jakarta (bye bye ",[139,140,141],"code",{},"javax.*",").",[85,144,145,148,149,71],{},[122,146,147],{},"Améliorations des performances"," : Optimisations du démarrage et de la mémoire, notamment grâce à ",[34,150,153],{"href":151,"rel":152},"https:\u002F\u002Fwww.graalvm.org\u002F",[38],"GraalVM",[85,155,156,159],{},[122,157,158],{},"Plus de sécurité"," : Mise à jour des dépendances (Spring Security 7, OAuth2.1, etc.) et correction de vulnérabilités connues.",[85,161,162,165,166,71],{},[122,163,164],{},"Versionning d’API"," : Le versionning d’API dans les Controllers est ",[34,167,170],{"href":168,"rel":169},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F09\u002F16\u002Fapi-versioning-in-spring",[38],"maintenant natif et facilité",[85,172,173,176,177,71],{},[122,174,175],{},"Et surtout, le support à long terme (LTS)"," : La version 4 bénéficiera d’un support étendu. A partir du 30 juin 2026 (à la fin de ce mois-ci donc), ",[34,178,181],{"href":179,"rel":180},"https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot#support",[38],"la version Open Source de Spring Boot 3.5 ne recevra plus de correctifs de bugs ni de sécurité",[19,183,184],{},[185,186],"img",{"alt":187,"src":188},"Planning du support des différentes versions de Spring Boot","\u002Fcontent-assets\u002F2026-06-08-rex-montee-de-version-spring-boot-4-et-ses-dependances\u002Fassets\u002Fimg1.webp",[19,190,191,192,71],{},"Pour plus de détails et d’autres arguments, n’hésitez pas à aller consulter les ",[34,193,196],{"href":194,"rel":195},"https:\u002F\u002Fspring.io\u002Fprojects\u002Frelease-highlights",[38],"Release Highlights de Spring Boot 4.0",[19,198,199],{},"N’hésitez donc plus à vous aussi préparer cette bascule, pour éviter d’accumuler ce chantier en dette technique et de réduire ainsi l’entropie logicielle de vos projets.",[201,202,203],"blockquote",{},[19,204,205,206,211],{},"💡 A l’heure où cet article est écrit, la version 4.1 de Spring Boot est en préparation. Une ",[34,207,210],{"href":208,"rel":209},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-4.1.0-RC1-Release-Notes",[38],"Release Candidate"," existe déjà.",[107,213,215],{"id":214},"pré-requis-et-conseils","Pré-requis et conseils",[19,217,218,219,224,225,230,231,142],{},"Pour ",[34,220,223],{"href":221,"rel":222},"https:\u002F\u002Fdocs.spring.io\u002Fspring-boot\u002F3.5\u002Fsystem-requirements.html",[38],"Spring Boot 3.5"," comme pour ",[34,226,229],{"href":227,"rel":228},"https:\u002F\u002Fdocs.spring.io\u002Fspring-boot\u002Fsystem-requirements.html",[38],"Spring Boot 4.0",", la version de Java minimum est 17, pas de problème de ce côté là. Mais si voulez vraiment profiter des optimisations de Spring Boot 4, il est vivement conseillé d’être en Java 21 ou plus (pour profiter par exemple des ",[34,232,130],{"href":128,"rel":233},[38],[19,235,236],{},"Avant d’effectuer cette bascule, il est nécessaire de partir de bases saines. Montez déjà votre projet à la dernière version de Spring Boot 3.5.X disponible. Prenez également le temps de vérifier qu’aucune méthode dépréciée de cette version ne soit utilisée (elle sera probablement supprimée en Spring Boot 4).",[19,238,239,240,71],{},"Bien entendu, une bonne couverture de tests est également nécessaire. Nous avions notamment des tests end-to-end qui nous ont permis de détecter des anomalies au plus tôt lors de la création de la ",[34,241,244],{"href":242,"rel":243},"https:\u002F\u002Fblog.hoppr.tech\u002Fblogs\u002F2026-04-14-rex-environnements-phmres",[38],"merge request sur un environnement éphémère",[26,246,248],{"id":247},"retour-dexpérience-de-la-montée-de-version","Retour d’expérience de la montée de version",[19,250,251],{},"Le produit client dont je souhaite vous parler ici a démarré en Avril 2025 en Spring Boot 3.4, et était déjà depuis passé en 3.5.",[19,253,254],{},"A l’heure de la montée de version vers Spring Boot 4, nous respections tous les pré-requis cités ci-desssus. Et hors de question d’avoir une version qui n’est plus supportée en production en juin 2026. Nous avons donc mis en place le chantier de migration.",[19,256,257,258,262],{},"L’idée était de faire du ",[259,260,261],"em",{},"all-in-one",". Comme vu précédemment, des dépendances tierces (Jackson, Hibernate, etc.) ont été upgradées dans la version 4. L’idée est également de nous adapter à ces nouvelles versions.",[107,264,266],{"id":265},"manque-de-maturité-de-spring-boot-4-difficultés","Manque de maturité de Spring Boot 4 & difficultés",[19,268,269,270,273],{},"Un premier test rapide avait été réalisé tôt après la release de Spring Boot 4. Cependant, ce fût un échec : le manque de documentation claire et de retours d’expérience nous a desservi. Par exemple, certains ",[259,271,272],{},"breaking changes"," étaient mal documentés.",[19,275,276,277,282],{},"Spring Boot 4 n’était pas encore assez mature, et de nombreuses corrections et modifications de documentation ont été réalisées depuis (",[34,278,281],{"href":279,"rel":280},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Freleases\u002Ftag\u002Fv4.0.1",[38],"exemple pour la v4.0.1","). Nous avons rapidement reporté le chantier à une date ultérieure.",[19,284,285],{},"D’autre part, étant donné que la migration se faisait sur plusieurs dépendances à la fois, il était parfois difficile de trouver une documentation centralisée de tous les changements à effectuer. C’est aussi ce que veut combler cet article, en donnant une liste de liens utiles et de pièges à éviter. Voici donc un retour d’expérience de la seconde tentative qui a cette fois été menée au bout.",[107,287,289],{"id":288},"modifications-apportées","Modifications apportées",[19,291,292,293,296],{},"Outre quelques modifications de signatures de méthodes (ex: le constructeur de ",[139,294,295],{},"ContentCachingRequestWrapper"," qui prend un deuxième paramètre), voici les principales modifications apportées dans notre projet :",[19,298,299],{},"Pom.xml",[19,301,302,303,308,309,314],{},"Notre projet utilise Maven et son fameux ",[34,304,307],{"href":305,"rel":306},"https:\u002F\u002Fmaven.apache.org\u002Fpom.html#what-is-the-pom",[38],"POM",". Les dépendances pour Spring Boot 4 changent pour adopter une ",[34,310,313],{"href":311,"rel":312},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F10\u002F28\u002Fmodularizing-spring-boot",[38],"forme plus modulaire",", avec des modules plus petits et ciblés. Par exemple, chaque technologie, embarquée a désormais :",[82,316,317,323,329,335],{},[85,318,319,320],{},"Un module principal : ",[139,321,322],{},"spring-boot-graphql",[85,324,325,326],{},"Un starter : ",[139,327,328],{},"spring-boot-starter-graphql",[85,330,331,332],{},"Un module de test : ",[139,333,334],{},"spring-boot-graphql-test",[85,336,337,338],{},"Un starter de test :  ",[139,339,340],{},"spring-boot-starter-graphql-test",[19,342,343,344,349,350,353],{},"D’autre part, nous avions des dépendances en direct à certaines technologies (",[34,345,348],{"href":346,"rel":347},"https:\u002F\u002Fwww.liquibase.com\u002F",[38],"Liquibase"," dans notre cas) qui ont maintenant un starter dédié (ici ",[139,351,352],{},"spring-boot-starter-liquibase"," )",[19,355,87],{},[19,357,358,359,364],{},"Vous pourrez bien entendu retrouver des éléments de réflexion sur la documentation ",[34,360,363],{"href":361,"rel":362},"https:\u002F\u002Fdocs.openrewrite.org\u002Frecipes\u002Fjava\u002Fjackson\u002Fupgradejackson_2_3",[38],"OpenRewrite de migration de Jackson 2 à 3",". Pour vous citer les principales modifications apportées dans notre cas :",[82,366,367,378,399,410],{},[85,368,369,370,373,374,377],{},"Le package ",[139,371,372],{},"com.fasterxml.jackson","  est remplacé par ",[139,375,376],{},"tools.jackson"," .",[85,379,380,381,386,387,390,391,394,395,398],{},"Les exceptions ",[34,382,385],{"href":383,"rel":384},"https:\u002F\u002Fjavadoc.io\u002Fdoc\u002Ftools.jackson.core\u002Fjackson-core\u002F3.0.0\u002Ftools.jackson.core\u002Ftools\u002Fjackson\u002Fcore\u002FJacksonException.html",[38],"JacksonException"," n’étendent plus l’exception ",[139,388,389],{},"IOException",", mais deviennent des ",[139,392,393],{},"RuntimeException"," . Plus besoin de ",[139,396,397],{},"try\u002Fcatch"," à chaque sérialisation\u002Fdésérialisation",[85,400,401,402,405,406,409],{},"L’ancien ",[139,403,404],{},"ObjectMapper"," devient un ",[139,407,408],{},"JsonMapper"," immutable plus simple à configurer.",[85,411,412,413,416,417,420],{},"Plus besoin de bricoler avec des ",[139,414,415],{},"JavaTimeModule"," et ",[139,418,419],{},"Jdk8Module"," directement inclus.",[19,422,423],{},"A noter, nous avons rencontré une erreur lors de cette montée de version :",[425,426,431],"pre",{"className":427,"code":428,"language":429,"meta":430,"style":430},"language-shell shiki shiki-themes github-dark-default","Caused by: tools.jackson.databind.exc.MismatchedInputException: Cannot map `null` into type `boolean` (set `DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES` to 'false' to allow)\n","shell","",[139,432,433],{"__ignoreMap":430},[434,435,438,442,446,449,452,455,458,461,464,467,470,472,475,477,481,485,487,490,492,495,498,500,503],"span",{"class":436,"line":437},"line",1,[434,439,441],{"class":440},"sQhOw","Caused",[434,443,445],{"class":444},"s9uIt"," by:",[434,447,448],{"class":444}," tools.jackson.databind.exc.MismatchedInputException:",[434,450,451],{"class":444}," Cannot",[434,453,454],{"class":444}," map",[434,456,457],{"class":444}," `",[434,459,460],{"class":440},"null",[434,462,463],{"class":444},"`",[434,465,466],{"class":440}," into",[434,468,469],{"class":444}," type",[434,471,457],{"class":444},[434,473,474],{"class":440},"boolean",[434,476,463],{"class":444},[434,478,480],{"class":479},"sZEs4"," (",[434,482,484],{"class":483},"sFSAA","set",[434,486,457],{"class":444},[434,488,489],{"class":440},"DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES",[434,491,463],{"class":444},[434,493,494],{"class":440}," to",[434,496,497],{"class":444}," 'false'",[434,499,494],{"class":444},[434,501,502],{"class":444}," allow",[434,504,505],{"class":479},")\n",[19,507,508,509,511,512,515],{},"Après investigation, il s’avère que la configuration par défaut de Jackson a également changé. Ici, c’est ",[139,510,489],{}," qui a été passé à ",[139,513,514],{},"false"," par défaut.",[19,517,518],{},"Ici deux solutions :",[82,520,521,527],{},[85,522,523,524],{},"Le forcer de nouveau à ",[139,525,526],{},"true",[85,528,529,530,535],{},"Se mettre en conformité et ne plus avoir de booléens dans nos ",[34,531,534],{"href":532,"rel":533},"https:\u002F\u002Ffr.wikipedia.org\u002Fwiki\u002FObjet_de_transfert_de_donn%C3%A9es",[38],"DTO"," (ce que nous avons fait)",[19,537,538,539,544],{},"Pour éviter d’autres déconvenues, n’hésitez pas à consulter le ",[34,540,543],{"href":541,"rel":542},"https:\u002F\u002Fgithub.com\u002FFasterXML\u002Fjackson\u002Fwiki\u002FJackson-Release-3.0#major-changesfeatures-in-30",[38],"détail de la release Jackson 3",". Vérifiez bien ces changements de configuration par défaut.",[201,546,547],{},[19,548,549,550,553,554,559,560,563],{},"⚠️ Attention au module ",[259,551,552],{},"jackson-annotations"," qui reste en 2.X et n’a pas de version 3, ",[34,555,558],{"href":556,"rel":557},"https:\u002F\u002Fgithub.com\u002Ffasterxml\u002Fjackson-annotations",[38],"comme indiqué sur le repo",". Vous pourrez donc continuer à avoir le package ",[139,561,562],{},"com.fasterxml.jackson.annotation"," en import.",[19,565,93],{},[19,567,568],{},"Côté Hibernate, pas de problème majeur à signaler. Nous n’avons eu qu’un changement en particulier à faire, dans nos entités ayant une propriété sous forme d’Enum :",[425,570,574],{"className":571,"code":572,"language":573,"meta":430,"style":430},"language-java shiki shiki-themes github-dark-default","@Column(name = \"feature\", columnDefinition = \"feature_enum\", nullable = false, unique = true)\n@Enumerated(EnumType.STRING)\n-    @JdbcType(value = PostgreSQLEnumJdbcType.class)\n+    @JdbcTypeCode(SqlTypes.NAMED_ENUM)     \nprivate Feature feature;\n","java",[139,575,576,630,641,663,677],{"__ignoreMap":430},[434,577,578,581,585,588,591,594,597,600,603,605,608,610,613,615,618,620,623,625,628],{"class":436,"line":437},[434,579,580],{"class":479},"@",[434,582,584],{"class":583},"suJrU","Column",[434,586,587],{"class":479},"(",[434,589,590],{"class":483},"name",[434,592,593],{"class":583}," =",[434,595,596],{"class":444}," \"feature\"",[434,598,599],{"class":479},", ",[434,601,602],{"class":483},"columnDefinition",[434,604,593],{"class":583},[434,606,607],{"class":444}," \"feature_enum\"",[434,609,599],{"class":479},[434,611,612],{"class":483},"nullable",[434,614,593],{"class":583},[434,616,617],{"class":483}," false",[434,619,599],{"class":479},[434,621,622],{"class":483},"unique",[434,624,593],{"class":583},[434,626,627],{"class":483}," true",[434,629,505],{"class":479},[434,631,633,635,638],{"class":436,"line":632},2,[434,634,580],{"class":479},[434,636,637],{"class":583},"Enumerated",[434,639,640],{"class":479},"(EnumType.STRING)\n",[434,642,644,647,650,653,655,658,660],{"class":436,"line":643},3,[434,645,646],{"class":583},"-",[434,648,649],{"class":479},"    @",[434,651,652],{"class":583},"JdbcType",[434,654,587],{"class":479},[434,656,657],{"class":483},"value",[434,659,593],{"class":583},[434,661,662],{"class":479}," PostgreSQLEnumJdbcType.class)\n",[434,664,666,669,671,674],{"class":436,"line":665},4,[434,667,668],{"class":583},"+",[434,670,649],{"class":479},[434,672,673],{"class":583},"JdbcTypeCode",[434,675,676],{"class":479},"(SqlTypes.NAMED_ENUM)     \n",[434,678,680,683,686],{"class":436,"line":679},5,[434,681,682],{"class":583},"private",[434,684,685],{"class":479}," Feature",[434,687,688],{"class":479}," feature;\n",[26,690,692],{"id":691},"conclusion","Conclusion",[19,694,695],{},"Nous avions un terrain très propice pour cette montée de version : stratégie de tests automatisées efficace, environnement éphémère sur lequel tester la non-régression, mises à jours de Spring Boot 3.5 pour partir de moins loin, code propre… Là aussi la qualité logicielle a son importance !",[19,697,698,699,71],{},"En effet, une entropie logicielle trop importante aurait bien compliqué les choses. Le fait que tout soit sous contrôle à chaque instant avant un chantier de ce type est un pré-requis nécessaire. Et c’est exactement ce que nous promouvons chez ",[34,700,703],{"href":701,"rel":702},"https:\u002F\u002Fwww.hoppr.tech\u002F",[38],"HoppR",[19,705,706],{},"Finalement, la principale difficulté que nous avons rencontrée est l’éparpillement de documentation, pas toujours très claire. J’espère que cet article répondra à ce manque.",[107,708,710],{"id":709},"autres-liens-utiles","Autres liens utiles",[19,712,713],{},[34,714,715],{"href":715,"rel":716},"https:\u002F\u002Fgithub.com\u002FFasterXML\u002Fjackson\u002Fblob\u002Fmain\u002Fjackson3\u002FMIGRATING_TO_JACKSON_3.md",[38],[19,718,719],{},[34,720,721],{"href":721,"rel":722},"https:\u002F\u002Fspring.io\u002Fblog\u002F2025\u002F10\u002F07\u002Fintroducing-jackson-3-support-in-spring",[38],[19,724,725],{},[34,726,727],{"href":727,"rel":728},"https:\u002F\u002Fdocs.openrewrite.org\u002Frecipes\u002Fjava\u002Fjackson\u002Fupdateserializationinclusionconfiguration",[38],[19,730,731],{},[34,732,733],{"href":733,"rel":734},"https:\u002F\u002Fdocs.openrewrite.org\u002Frecipes\u002Fjava\u002Fjackson\u002Fremovebuiltinmoduleregistrations",[38],[19,736,737],{},[34,738,739],{"href":739,"rel":740},"https:\u002F\u002Fgithub.com\u002Fawspring\u002Fspring-cloud-aws\u002Freleases\u002Ftag\u002Fv4.0.0",[38],[19,742,743],{},[34,744,745],{"href":745,"rel":746},"https:\u002F\u002Fgithub.com\u002Fspring-projects\u002Fspring-boot\u002Fwiki\u002FSpring-Boot-4.0-Migration-Guide",[38],[19,748,749],{},[34,750,751],{"href":751,"rel":752},"https:\u002F\u002Fbeaufume.fr\u002Farticles\u002Fspring-boot-4\u002F",[38],[19,754,755],{},[34,756,757],{"href":757,"rel":758},"https:\u002F\u002Fdocs.hibernate.org\u002Form\u002F7.0\u002Fmigration-guide\u002F",[38],[19,760,761],{},[34,762,763],{"href":763,"rel":764},"https:\u002F\u002Fdocs.hibernate.org\u002Form\u002F7.0\u002Fuserguide\u002Fhtml_single\u002F",[38],[19,766,767],{},[34,768,361],{"href":361,"rel":769},[38],[771,772,773],"style",{},"html pre.shiki code .sQhOw, html code.shiki .sQhOw{--shiki-default:#FFA657}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html pre.shiki code .sZEs4, html code.shiki .sZEs4{--shiki-default:#E6EDF3}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .suJrU, html code.shiki .suJrU{--shiki-default:#FF7B72}",{"title":430,"searchDepth":632,"depth":632,"links":775},[776,777,781,785],{"id":28,"depth":632,"text":29},{"id":55,"depth":632,"text":56,"children":778},[779,780],{"id":109,"depth":643,"text":110},{"id":214,"depth":643,"text":215},{"id":247,"depth":632,"text":248,"children":782},[783,784],{"id":265,"depth":643,"text":266},{"id":288,"depth":643,"text":289},{"id":691,"depth":632,"text":692,"children":786},[787],{"id":709,"depth":643,"text":710},"2026-06-08T16:12:32.816Z","Dans le cadre d’un projet que j’ai accompagné en tant que lead developer, j’ai eu l’occasion d’effectuer une migration de Spring Boot 3.5 vers Spring Boot 4.  Je vous partage aujourd’hui mon retour d’","md",".\u002Fassets\u002Fcover-image.webp",{},true,"\u002Fblogs\u002F2026-06-08-rex-montee-de-version-spring-boot-4-et-ses-dependances",[796,801],{"id":797,"name":798,"image":799,"linkedin":800,"x":13},"33bf4462-cd38-80da-845c-c63b2fd024bf","Florian Hirson",".\u002Fassets\u002Freviewer-florian-hirson.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fflorian-hirson\u002F",{"id":802,"name":803,"image":804,"linkedin":805,"x":13,"github":806,"bio":807},"374f4462-cd38-8015-8ec8-daea6b7f8b94","Paul Plancq",".\u002Fassets\u002Freviewer-paul-plancq.webp","www.linkedin.com\u002Fin\u002Fpplancq","https:\u002F\u002Fgithub.com\u002Fpplancq","Senior Consultant Craft - HoppR Lille",{"title":5,"description":789},"blogs\u002F2026-06-08-rex-montee-de-version-spring-boot-4-et-ses-dependances\u002Findex",[811,573,812,813,814],"craft","spring boot","documentation","rex","SPqYVLKPAB7iQbaJvniM0uRN8ZI0kvBN3Pj1zxuNtbg",[817,825,831,840],{"path":818,"title":819,"image":820,"date":821,"tags":822},"\u002Fblogs\u002F2026-05-27-notre-ux-designer-sappelle-claude","Notre UX Designer s'appelle Claude","\u002Fcontent-assets\u002F2026-05-27-notre-ux-designer-sappelle-claude\u002Fassets\u002Fcover-image.webp","27 mai 2026",[814,823,811,824],"ia","ux",{"path":826,"title":827,"image":828,"date":829,"tags":830},"\u002Fblogs\u002F2026-04-14-rex-environnements-phmres","REX: Environnements éphémères","\u002Fcontent-assets\u002F2026-04-14-rex-environnements-phmres\u002Fassets\u002Fcover-image.webp","14 avril 2026",[811,814],{"path":832,"title":833,"image":834,"date":835,"tags":836},"\u002Fblogs\u002F2024-12-10-gnration-agrgation-et-dploiement-de-documentation-tsdoc-avec-docusaurus-et-vercel","Génération, agrégation et déploiement de documentation TSDoc avec Docusaurus et Vercel","\u002Fcontent-assets\u002F2024-12-10-gnration-agrgation-et-dploiement-de-documentation-tsdoc-avec-docusaurus-et-vercel\u002Fassets\u002Fcover-image.webp","10 décembre 2024",[837,813,811,838,839],"typescript","fixentropy.io","dragee.io",{"path":841,"title":842,"image":843,"date":821,"tags":844},"\u002Fblogs\u002F2026-05-27-platform-engineering-lart-de-dompter-lentropie-du-cloud","Platform Engineering : L’art de dompter l’entropie du cloud","\u002Fcontent-assets\u002F2026-05-27-platform-engineering-lart-de-dompter-lentropie-du-cloud\u002Fassets\u002Fcover-image.webp",[845,846,811,847,848,849],"plateform engineering","cloud","observabilité","devops","architecture",1780935255615]