Spring Boot 4

Что нового

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

Установите OpenJDK 25 (не забудте поменять SDK в Project Structure... и сделать mvn clean + Refresh)
При запуске Maven не из IDEA нужно:
  • или поменять JAVA_HOME
  • или поправить переменные окружения в /apache-maven/bin/mvn[.cmd]

IntelliJ IDEA 2025.2

Обновить IDEA не обязательно, но в новой будет удобнее.

Работа с проектом

Работа с проектом будет выстроена аналогично остальным нашим курсам:
проект в Git репозитории (ветка boot4), патчи для изменения проекта, ветка с готовым кодом.
В мини-проекте всего 3 патча. Можно их применить по ходу занятий, а можно сразу вычекать ветку boot4patched и откатывать на нужную ревизию:

ВАРИАНТЫ

  • По мере прохождения материала нужно будет последовательно применять в ветке master пронумерованные патчи (Apply patch). Патчи сделаны в JetBrains IDEA, лучше всего применять их в этой IDE или аналогах).
  • После применения каждого патча следует делать коммит, чтобы было легче отслеживать изменения в git.
В этом случае клонируем начальный код Spring Boot 4: (ветка boot4) проекта bootjava:
git clone --branch boot4 https://github.com/JavaOPs/bootjava

ИЛИ

  • Нужно склонировать ветку boot4patched c уже примененными патчами
  • По мере прохождения материала откатывать проект (Checkout Revision) на нужное место
Ветка boot4patched с закоммиченными патчами:
git clone --branch boot4patched https://github.com/JavaOPs/cloudjava
Также можете настроить push проекта в свой Git репозиторий
Проходя занятие вы смотрите проект - добавленный в него код, объяснения добавленного кода в занятии, запускаете и дебажите приложение.

Миграция

В склонированном проекте (ветка boot4) разберем все изменения коммита Migrate to spring boot 4

Начнем с 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.

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