Здравствуй, читатель Хабра!

До выхода 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 - готовимся заранее

За основу взят код открытого проекта 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!

Комментарии (2)


  1. Nireko
    23.08.2022 03:10
    +1

    Мало :(


  1. gkislin Автор
    23.08.2022 11:41

    Если пара ссылок в заголовке, если нужна информация. Вообще это не про Spring Boot 3.0 а про переезд.