
Spring Boot 3 завершает переход на Spring Framework 6, который полностью ориентирован на поддержку Java 17 и выше. Это означает отказ от старых версий Java и устаревших зависимостей, таких как Spring Data старого поколения. Разработчикам необходимо убедиться, что все библиотеки и сторонние зависимости совместимы с Java 17, чтобы избежать проблем при миграции.
Одним из ключевых нововведений является поддержка создания нативных образов через GraalVM. Для приложений с высокой нагрузкой это позволяет существенно сократить время запуска и уменьшить потребление памяти. При этом необходимо учитывать, что не все стандартные бины Spring автоматически поддерживают нативную компиляцию, и может потребоваться ручная настройка.
Изменились подходы к конфигурации и управлению профилями: новые свойства и методы аннотаций позволяют точнее задавать условия активации компонентов и исключений. Рекомендуется пересмотреть файлы application.properties и application.yml, чтобы воспользоваться новыми возможностями, например, для разделения конфигурации по средам и упрощения тестирования.
В области безопасности Spring Boot 3 обновил механизмы работы с OAuth2 и JWT. Для проектов с внешней аутентификацией это значит более строгую проверку токенов и упрощённое подключение сторонних провайдеров. Разработчикам следует изучить новые классы и интерфейсы, чтобы избежать устаревших методов и уязвимостей.
Изменения затронули также управление зависимостями и логирование. Обновлены версии основных библиотек, введены новые зависимости для улучшения совместимости с Jakarta EE. Логи теперь можно настраивать через более гибкие конфигурации, что упрощает мониторинг и отладку приложений.
Поддержка Java 17 и отказ от старых версий
Spring Boot 3 официально поддерживает только Java 17 и более новые версии. Все версии Java ниже 17, включая LTS 11, больше не совместимы. Это затрагивает проекты, которые используют устаревшие библиотеки или старые средства сборки, такие как Maven Compiler Plugin с версией Java ниже 17.
Для успешной миграции необходимо обновить среду разработки и CI/CD-пайплайны. Рекомендуется указать в pom.xml или build.gradle явно source и target на 17, чтобы избежать проблем компиляции с новыми API. Также стоит проверить, что все сторонние зависимости совместимы с Java 17, особенно библиотеки, использующие внутренние пакеты JDK.
Некоторые изменения в языке Java 17 могут повлиять на существующий код. Например, использование sealed classes, новые методы в String и Optional, а также улучшенные паттерн-матчинг конструкции. Разработчикам следует пересмотреть критические участки кода, где возможны несовместимости.
Отказ от старых версий Java открывает возможности для оптимизации работы приложений. Новые сборщики мусора (G1, ZGC), улучшения в производительности JIT-компиляции и сниженное потребление памяти позволяют запускать сервисы с меньшими ресурсами. Рекомендуется провести нагрузочное тестирование после обновления, чтобы оценить влияние новых JVM-функций на конкретное приложение.
Обновления в Spring Framework 6 и совместимость с Boot 3

Spring Framework 6 полностью переходит на Jakarta EE 10, что требует замены всех javax.* пакетов на jakarta.*. Это напрямую влияет на работу с JPA, Servlets, Validation и другими компонентами. Приложения, использующие старые аннотации @javax.persistence.*, необходимо обновить на @jakarta.persistence.*.
В Spring Boot 3 интеграция с Framework 6 обеспечивает единый подход к конфигурации через аннотации @Configuration и @Bean, но с учётом новых типов return в функциональных бин-провайдерах. Рекомендуется пересмотреть все кастомные конфигурации и сервисы для совместимости с новыми сигнатурами методов.
Изменения коснулись также обработки зависимостей и внедрения компонентов. Встроенные механизмы автоконфигурации теперь используют обновлённые провайдеры и более строгую проверку типов. Для успешной миграции следует проверить, что кастомные компоненты не конфликтуют с новыми автоматическими бин-провайдерами.
Spring Framework 6 усилил поддержку реактивных приложений. Новые версии WebFlux и R2DBC позволяют строить полностью асинхронные сервисы с улучшенной производительностью. При миграции рекомендуется протестировать все endpoints и репозитории, чтобы убедиться в корректной обработке потоков и обратного давления.
Новые возможности работы с GraalVM и нативными образами

Spring Boot 3 добавил официальную поддержку создания нативных образов с помощью GraalVM. Это позволяет запускать приложения с минимальным временем старта и сниженным потреблением памяти. Для сборки нативного образа используется плагин spring-native и специальная конфигурация build.gradle или pom.xml.
Не все стандартные бины и сторонние библиотеки автоматически поддерживаются в нативном режиме. Следует проверять совместимость таких компонентов, как JPA, Spring Data, и динамическое создание прокси. Рекомендуется использовать reflection-config.json и native-image.properties для явного указания зависимостей, которые должны быть включены в образ.
Пример настройки сборки нативного образа через Maven:
| Элемент | Описание |
|---|---|
| plugin | <groupId>org.springframework.experimental</groupId><artifactId>spring-native-maven-plugin</artifactId> |
| goal | native-image |
| configuration | Указание mainClass, classpath и ресурсов, включаемых в образ |
Рекомендуется проводить нагрузочное тестирование нативных образов, так как поведение сборки может отличаться от JVM-версии. Важно проверять обработку потоков, кэширование и подключение к базам данных, чтобы убедиться в корректной работе сервисов после компиляции.
Изменения в конфигурации свойств и профилей

Spring Boot 3 обновил механизм загрузки конфигураций, полностью переходя на поддержку ConfigData API. Старые методы через @PropertySource и прямое использование Environment остаются, но их функциональность ограничена. Рекомендуется переходить на application-{profile}.properties или .yml с явным указанием активного профиля.
Теперь профили можно активировать через несколько источников одновременно: системные переменные, параметры JVM, свойства конфигурации и файлы в папках config. Это позволяет создавать гибкие окружения без дублирования файлов и обеспечивает точную загрузку настроек для конкретной среды.
Изменились правила разрешения конфликтов свойств: при пересечении нескольких источников приоритет отдаётся значениям из ConfigData, затем системным переменным, и только потом файлам в classpath. Разработчикам следует проверить порядок загрузки своих конфигураций, чтобы избежать неожиданных значений.
Также появилась поддержка новых типов свойств: списков, карт и кастомных объектов через @ConfigurationProperties с автоматическим биндингом. Рекомендуется пересмотреть существующие классы конфигурации и при необходимости использовать новые аннотации для упрощения маппинга и снижения ручного кода.
Обновлённые механизмы безопасности и OAuth2

Spring Boot 3 обновил интеграцию с Spring Security 6, включая более строгую проверку токенов OAuth2 и улучшенную поддержку JWT. Некоторые устаревшие методы конфигурации через WebSecurityConfigurerAdapter больше не поддерживаются, что требует перехода на компонентный подход с SecurityFilterChain.
Рекомендации для настройки безопасного приложения:
- Использовать @Bean для SecurityFilterChain вместо наследования WebSecurityConfigurerAdapter.
- Настраивать OAuth2 через ClientRegistrationRepository и OAuth2AuthorizedClientService для корректной работы с внешними провайдерами.
- Для JWT использовать JwtDecoder с явно указанными алгоритмами и ключами, чтобы исключить слабые шифры.
- Пересмотреть правила авторизации URL и методы HTTP, чтобы они соответствовали новым фильтрам и цепочкам безопасности.
Особенности миграции с устаревших методов:
- Удалить вызовы http.authorizeRequests() и заменить на http.authorizeHttpRequests() с актуальными matchers.
- Настроить обработку ошибок через AuthenticationEntryPoint и AccessDeniedHandler вместо устаревших обработчиков.
- Проверить интеграцию с внешними OAuth2-провайдерами, обновив URL авторизации, токен-эндпоинты и параметры клиента.
Обновления позволяют повысить защиту приложений, особенно при использовании микросервисной архитектуры и облачных сред, где корректная проверка токенов и строгие цепочки фильтров критичны для безопасности данных.
Изменения в логировании и управлении зависимостями
Spring Boot 3 обновил встроенные механизмы логирования и структуру зависимостей, чтобы обеспечить совместимость с Jakarta EE 10 и Spring Framework 6. Логирование по умолчанию использует Logback 1.4, а конфигурация через application.properties или application.yml стала более строгой в проверке уровней логов и форматов.
Рекомендации по настройке логирования:
- Использовать logging.level.<имя_пакета> для точечной настройки уровней логов.
- При необходимости интегрировать Logstash Encoder для структурированных логов.
- Пересмотреть кастомные appenders, так как некоторые устаревшие конфигурации Logback больше не поддерживаются.
- Для микросервисов рекомендуется включать correlationId через MDC для отслеживания запросов.
Изменения в управлении зависимостями:
- Spring Boot 3 отказался от старых версий Spring Data и сторонних библиотек, не совместимых с Jakarta EE 10.
- Все зависимости теперь привязаны к новой платформе Spring Boot Dependency Management 3.x для автоматического согласования версий.
- Рекомендуется проверить pom.xml или build.gradle на наличие конфликтов версий и удалить дублирующие зависимости.
- Использовать dependencyManagement для контроля версий и исключений конфликтующих библиотек.
Эти изменения позволяют уменьшить риск конфликтов версий и упрощают обновление проектов, обеспечивая более стабильное выполнение приложений и корректное логирование событий.
Вопрос-ответ:
Какие изменения в Spring Boot 3 связаны с поддержкой Java 17?
Spring Boot 3 поддерживает только Java 17 и более новые версии. Это означает, что приложения, использующие версии ниже 17, необходимо обновить. Изменения затрагивают совместимость с зависимостями и сборку проекта. Для корректной работы рекомендуется указывать source и target на 17 в pom.xml или build.gradle, а также проверить сторонние библиотеки на совместимость с новой версией JVM.
Как перейти на новые механизмы безопасности и OAuth2 в Spring Boot 3?
Spring Boot 3 отказался от использования WebSecurityConfigurerAdapter. Вместо этого применяется SecurityFilterChain и компонентный подход. Для OAuth2 рекомендуется настраивать ClientRegistrationRepository и OAuth2AuthorizedClientService, а для JWT использовать JwtDecoder с явными алгоритмами. Следует пересмотреть правила авторизации URL и методы HTTP, чтобы соответствовать новой структуре фильтров и цепочек безопасности.
Что изменилось в конфигурации свойств и профилей в Spring Boot 3?
Spring Boot 3 использует ConfigData API для загрузки конфигураций. Старые методы через @PropertySource остались, но их функциональность ограничена. Теперь профили можно активировать одновременно из системных переменных, параметров JVM, файлов конфигурации и папок config. Приоритет при конфликте свойств отдаётся ConfigData, затем системным переменным и файлам в classpath. Также появилась поддержка биндинга списков, карт и кастомных объектов через @ConfigurationProperties.
Как настроить GraalVM и нативные образы для приложений на Spring Boot 3?
Для сборки нативного образа используется плагин spring-native и настройка в build.gradle или pom.xml. Не все бины и библиотеки поддерживаются автоматически, поэтому требуется настройка через reflection-config.json и native-image.properties. После компиляции рекомендуется проверить работу потоков, кэширования и подключение к базам данных, так как поведение нативного образа может отличаться от JVM.
Какие изменения произошли в логировании и управлении зависимостями?
Spring Boot 3 обновил встроенное логирование на Logback 1.4 и строгую проверку конфигурации уровней и форматов. Настройку рекомендуется выполнять через logging.level.<имя_пакета> и использовать MDC для отслеживания запросов. В управлении зависимостями введена новая платформа Spring Boot Dependency Management 3.x, которая обеспечивает согласование версий и исключает конфликты. Необходимо проверять pom.xml или build.gradle на дублирующие библиотеки и использовать dependencyManagement для контроля версий.
