Кажется, ещё недавно я рассказывал со сцены на Joker в Петербурге о граблях обновления #SpringBoot c версии 1 на 2. Но оказывается прошло семь лет, и вот намедни был объявлен официальный релиз версии Spring Boot 4.0. Любопытно, что в этот же день на онлайн-конференции Подлодка был доклад про переход на эту версию; ребята здорово подгадали 👨🏫
В документе Spring Boot 4.0 Release Notes одной из первых идёт весьма обтекаемая формулировка:
... upgrading existing applications can be a little more involved that usual.
Как изящно они обошли фразу "вы офигеете разгребать поломки", не правда ли? 😉
Впрочем, наверняка опыт у всех будет разным. Судя по текущему Migration Guide, который в эти жаркие дни обновляется чуть ли не каждые несколько часов, основное веселье предстоит со стартерами ("кирпичиками" в Spring Boot), в том числе тестовыми, потому что одним из главных изменений в этой мажорной версии стала модуляризация фреймворка 🧱
Кроме того, похоже, не обойдётся и без развалов на этапе компиляции, так как многие классы разъехались по модульным пакетам, именуемым как
org.springframework.boot.<module>. Конечно, умная InetlliJ IDEA, скорее всего, быстро подскажет, на что нужно поменять импорты, но если в проекте много явных обращений к классам Spring Boot, потыкаться всё равно придётся 👉К счастью, такое масштабное обновление касается очень многих проектов, поэтому для него уже написана стопка рецептов на OpenRewrite, которая так и называется — Migrate to Spring Boot 4.0. По идее, она должна очень сильно упростить весь процесс, сведя его, по сути, к трём шагам:
1️⃣ Прописать в скрипте сборки рецепт (на примере
build.gradle):plugins {
id("org.openrewrite.rewrite") version("latest.release")
}
rewrite {
activeRecipe("org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0")
setExportDatatables(true)
}
dependencies {
rewrite("org.openrewrite.recipe:rewrite-spring:6.19.0")
}2️⃣ Запустить автомиграцию командой
gradle rewriteRun.3️⃣ Отревьюить получившиеся изменения и заставить их работать (чертыхаясь и понося уже не себя, а умный скрипт).
Какой способ обновления лучше — вручную или автоматически — каждый решает сам.
Но какой бы вы не выбрали, после завершения напишите, пожалуйста, в комментариях к посту или в ЛС, как у вас всё прошло — попробуем вместе собрать реальную картину обновлений 🖼