Здесь, в этой статье, я расскажу о том, как перенести наше Java-приложение с Spring boot 2 на Spring boot 3, а также покажу некоторые ошибки, с которыми я столкнулся в процессе миграции.

Мой проект основан на следующем стеке:

  1. Приложение микросервиса на основе Java, работающее в модуле kubernetes.
  2. Использование базы данных postgres.
  3. Многомодульное приложение Gradle.
  4. Java 17 с интегрированной средой разработки IntelliJ.

Установите Яву 17

Spring boot 3.x не поддерживает версию Java ‹ 17, поэтому нам необходимо установить JDK 17. Для запуска spring boot 3.x необходимо установить JDK 17. SDKMAN — это удобный инструмент для управления различными версиями Java, обязательно ознакомьтесь с ним.

Установите весеннюю загрузку 3

Теперь мы можем перейти на spring boot 3.x. Всегда рекомендуется обновиться до последней версии Spring Boot 3, которая доступна для обслуживания. Для плавной миграции также рекомендуется сначала перейти на Spring Boot 2.7.x. Этот подход гарантирует, что мы работаем с самыми последними зависимостями.

id 'org.springframework.boot' version '3.1.0' apply false

Проблемы, решенные после вышеуказанных шагов:

  1. Обновить пакеты с «javax» на «jakarta»

Java EE был заменен на Jakarta EE, поэтому Spring Boot 3 также обновил свои зависимости от Java EE до Jakarta EE API. Этот шаг хорошо задокументирован и является частью руководства по миграции.

javax.transaction.*  --> jakarta.transaction.*
javax.annotation.*   --> jakarta.annotation.*
javax.persistence.*  --> jakarta.persistence.*
javax.servlet.*      --> jakarta.servlet.*
javax.validation.*   --> jakarta.validation.*

2. Обновление зависимостей пользовательского интерфейса Swagger

Springdoc API был обновлен с помощью Spring Boot 3, и v2 можно найти здесь https://springdoc.org/v2/

Изменение версии в проекте на 2.1.0

implementation(group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui',version: 2.1.0)

3. Обновление версии оболочки Gradle

На первом этапе, когда мы изменяем версию «org.springframework.boot» на 3.1.0 и обновляем приложение в IntelliJ, оно не загружается со следующей ошибкой:

PermittedSubclasses requires ASM9
Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'machine-project-root'.
Caused by: org.gradle.internal.UncheckedException: java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed to create Jar file /Users/name/.gradle/caches/jars-9/5bef74195685ec65a206425cc0cfd949/spring-core-6.0.8.jar.
Caused by: java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed to create Jar file /Users/name/.gradle/caches/jars-9/5bef74195685ec65a206425cc0cfd949/spring-core-6.0.8.jar.
Caused by: org.gradle.api.GradleException: Failed to create Jar file /Users/name/.gradle/caches/jars-9/5bef74195685ec65a206425cc0cfd949/spring-core-6.0.8.jar.
Caused by: java.lang.UnsupportedOperationException: PermittedSubclasses requires ASM9

Поиск этой конкретной ошибки в то время не привел ни к конкретному решению, ни к полезной информации. Но очень быстро я понял, что это связано с версией gradle, которую использовал мой проект (7.2), и как только я обновил ее до 7.6, ошибка исчезла.

Сводка

Мы только что коснулись поверхности перехода на Spring Boot 3.x. Когда я узнаю больше возможностей, я постараюсь использовать их в своем проекте. Если найду еще ошибки, обновлю статью или напишу вторую часть.

Ссылки

  1. Официальный сайт Spring Boot: https://spring.io/projects/spring-boot
  2. SDKMAN для управления SDK: http://sdkman.io
  3. Руководство по миграции Spring Boot: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
  4. Официальный сайт Springdoc: https://springdoc.org/v2/