Что нового?

Spring Boot 4 и Spring Framework 7:

Новый функционал кратко и доступно описан здесь: Spring Boot 4 и Spring Framework 7: Ключевые фичи и изменения. Перечислим главное:

Spring Boot 4

  • «Модуляризация» автоконфигураций

  • Поддержка JDK 17/25

  • Совместимость с Jakarta EE 11

  • Поддержка Kotlin 2.2

  • Улучшенные Buildpacks и сборка Docker-образов, Интеграция Micrometer 2.x и OpenTelemetry

  • Обновления Spring Boot CLI, новые эндпоинты в Actuator, улучшенное управление свойствами и профилями

  • Spring Security 7, улучшенная интеграция с OAuth 2.2 и OIDC, улучшенная криптография

  • Начальная поддержка интеграции со Spring AI, улучшенный API для “подсказок” GraalVM

Spring Framework 7

  • API Versioning

  • Null Safety with JSpecify

  • Программный BeanRegistrar

  • Поддержка Optional в SpEL

  • @Retryable, @ConcurrencyLimit, @EnableResilientMethods

  • Конфигурация HTTP-клиентов с помощью @ImportHttpServices

  • Поддержка InputStream/OutputStream в HTTP-клиентах

  • Новый JmsClient и улучшения в JdbcClient

  • Централизованная конфигурация HTTP-конвертеров

  • Новый RestTestClient для тестирования REST API

  • Улучшенный PathPattern

  • Удаленный и deprecation API

Дополнительно можно посмотреть:

Java 25

Вышла Java 25. Установите OpenJDK 25 (не забудте поменять SDK в Project Structure... и сделать mvn clean + Refresh). При запуске Maven не из IDE нужно:

  • или поменять JAVA_HOME

  • или поправить переменные окружения в /apache-maven/bin/mvn[.cmd]

Миграция

Основной документ миграции: Spring Boot 4.0 Migration Guide

Репозиторий GitHub (ветка boot4). Склонировать ветку миграции можно так:

git clone --branch boot4 https://github.com/JavaOPs/bootjava

В склонированном проекте разберем все изменения коммита Migrate to spring boot 4 (удобнее всего смотреть изменения в IDE):

Начнем с pom.xml:

  • В properties обновляем Java на 25 и поднимаем версии до последних в Maven Central Repository

  • В конфигурации Jackson обновилась зависимость jackson-datatype-hibernate для для обнуления LAZY полей при сериализации в JSON (урок 7 курса BootJava). Новый Spring Boot по умолчанию использует Jackson 3 (group ID и пакеты изменились с com.fasterxml.jackson на tools.jackson), однако Jackson 2 остается в зависимостях springdoc-openapi-starter-webmvc-ui, поэтому будьте аккуратны с импортами - не изменились только пакеты jackson-annotations.

  • Зависимость findbugs для удаления WARNING при компиляции больше не нужна.

  • Spring Boot поменялась «модуляризация» автоконфигураций, см. Spring Boot 4. Новые модули. Зачем? Для тестов нам понядобятся новые зависимостиspring-boot-starter-webmvc-test (stackoverflow) и spring-boot-starter-security-test вместо spring-security-test (stackoverflow)

  • Для обработки lombok в annotationProcessor, теперь нужно его явно конфигурировать в maven-compiler-plugin (раньше было достаточно иметь в зависимостях). Зато в spring-boot-maven-plugin уже не надо исключать зависимости optional и compile вручную, чтобы они не попали в финальный jar - они исключаются автоматически.

Jackson 3

Кроме новой зависимости в pom.xml поменялось:

  • Конфигурирование в AppConfig теперь делается через JsonMapper.builder(), поэтому настройки jackson.visibility (JSON сериализацию/десериализацию по полям) из application.yaml также делаем программно в AppConfig#objectMapper

  • В JsonUtil поменялись импорты и IOException заменил на JacksonException.

Прочие изменения

Это все - проект мигрирован!

API Versioning

В Spring 7 появилась долгожданная официальная поддержка нативного API Versioning. Добавим ее в наш проект (ветка boot4patched, коммит boot4_2_version):

  • Вместо application.yaml оказалось удобнее все сконфигурировать в WebConfig, версии и значение заголовка можно вынести в константы. Чтобы страничка Swagger REST OpenAPI не бросала MissingApiVersionException, нужно в конфигурацию добавить .setVersionRequired(false) или .setDefaultVersion(CURRENT_VERSION) (или обе настройки).

  • В @RequestMapping контроллеров добавляем версию.

  • Без setVersionRequired / setDefaultVersion тесты также не будут проходить. Тк. в проекте все запросы в тестах проходят через AbstractControllerTest#perform, в соответствии с Testing versioned APIs, сделаем реализацию простым добавлением заголовка версионирования в этом методе.

  • Проверьте, что теперь во всех запросах Swagger теперь автоматически появилось версионирование:

Также в проект добавлен функционал кэширование при авторизации через UserCache (он был в прошлых версиях Spring Boot) и проверка работы на Maven 4.
Вы можете разобрать этот функционал проекта самостоятельно или посмотреть на сайте этого мини-курса.

Успехов с Java! Буду рад конструктивным комментариям.

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


  1. aleksandy
    09.12.2025 17:28

    (не забудте поменять SDK в Project Structure... и сделать mvn clean + Refresh). При запуске Maven не из IDE нужно...

    "Автор онлайн обучения Java" не знаком с плагином, позволяющим этого не делать руками?


    1. gkislin Автор
      09.12.2025 17:28

      Не знал, спасибо, посмотрю. Статейку на Хабре нашел: https://habr.com/ru/articles/647831/