Здравствуй, читатель Хабра!
До выхода Spring Boot 3 осталось совсем немного - 3 месяца. Уже появляются статьи -
What’s New, It's time to get ready. Недавно JetBrains выпустила IDEA с поддержка Spring 6 и Spring Boot 3. Самое время потренироваться заранее в миграции. В разработке нового учебного курса я попробовал перевести свой открытый учебный проект Spring Boot 2.x + HATEOAS на Spring Boot 3, шаги и код проекта ниже.
![Spring Boot 3.0 - готовимся заранее Spring Boot 3.0 - готовимся заранее](https://habrastorage.org/getpro/habr/upload_files/7c7/4d8/742/7c74d8742a16fd17ddd179b061e4646b.png)
За основу взят код открытого проекта Spring Boot 2.x + HATEOAS (код на GitHub в ветке patched). Функционал простой - основа любого современного REST веб-приложения: аутентификация и авторизация на основе ролей, регистрация пользователя в приложении, управление своим профилем и администрирование пользователей.
Первым комитом (ветка patched) перевел проект с Maven на Gradle - давно хотел, появился повод:) Примечание - против Maven ничего не имею, для сравнения Gradle и Maven есть отдельные статьи и дискуссии.
Далее будет разбор второго шага - кода миграции: сommit details
Для разбора проще всего вычекать к себе проект с этой ревизией:git clone --branch patched https://github.com/JavaOPs/cloudjava
cd cloudjava
git checkout 2d74f6158b8380587a3360e911e3a6ff42c49642
Обновляем версию Spring и добавляем snapshot репозитории в
build.gradle
Меняем зависимость
springdoc-openapi
наspringdoc-openapi-starter-webmvc-ui
и пакет дляGroupedOpenApi
: смотри SpringDoc OpenAPI 2.x migration guideДобавляем snapshot репозитории в
settings.gradle
В коде всего проекта меняем
javax.validation
иjavax.servlet
наjakarta
(можно контекстной заменой). Здравствуй JPA 3, Hibernate 6, Hibernate Validator 7 и Tomcat 10 !Обновляем зависимость
jackson-datatype-hibernate5
наjackson-datatype-hibernate5-jakarta
. ВAppConfig
также делаем заменуHibernate5Module
наHibernate5JakartaModule
В
GlobalExceptionHandler
меняемHttpStatus
наHttpStatusCode
. Появилась новая иерархия статусов возврата без требования бытьenum
. Однако дляgetReasonPhrase()
теперь приходится делатьinstanceof HttpStatus
В
AdminUserControllerTest
не идут тесты на запросы со слешем в конце. Сделал отдельную переменнуюREST_URL_SLASH
Проект совсем небольшой, поэтому, если у вас встретятся неописанные здесь шаги, пишите в комментариях. Также буду рад любым замечаниям по коду.
И - желаю успехов с обновлением на Spring Boot 3!