Spring и Spring Boot — две самые популярные платформы Java, используемые разработчиками по всему миру. Команда Spring постоянно работает над улучшением и расширением фреймворков с каждым новым основным выпуском. Ожидается, что Spring 6 и Spring Boot 3 принесут значительные новые функции и изменения, которые будут способствовать дальнейшему развитию этих технологий. В этой статье мы отправляемся в путешествие, чтобы раскрыть захватывающие инновации, которые привносят Spring 6 и Spring Boot 3.
Что нового в Spring 6
Базовый уровень Java 17+:
- Поддержка функций языка Java 17, таких как выражения переключения запечатанных классов и т. д. Код Spring и API будут обновлены для использования новых возможностей Java 17, где это применимо.
- Поддержка дополнительных операторов реактивного потока и функций, представленных в JDK 17, таких как комбинаторы издателя реактивного потока. Spring WebFlux и реактивные компоненты могут использовать их.
- Spring 6 совместим во время выполнения с API Jakarta EE 9, а также с API Jakarta EE 10. Это означает, что вы можете использовать Spring 6 для разработки приложений, которые могут работать в средах выполнения, совместимых с Jakarta EE 9 или Jakarta EE 10.
- Spring 6 совместим с новейшими веб-серверами, такими как Tomcat 10.1, Jetty 11 и Undertow 2.3. Это означает, что вы можете использовать Spring 6 для разработки приложений, которые могут работать на этих веб-серверах.
Основной контейнер:
- В Spring 6 представлена поддержка компиляции Ahead-Of-Time (AOT). Это может значительно повысить производительность ваших приложений за счет их компиляции в собственный код.
- PathMatchingResourcePatternResolver использует NIO и API-интерфейсы пути к модулю для сканирования, обеспечивая поддержку сканирования пути к классам в собственном образе GraalVM и в пути к модулю Java соответственно.
- DefaultFormattingConversionService поддерживает анализ типа java.time по умолчанию на основе ISO.
Доступ к данным и транзакции:
- Spring 6 обеспечивает поддержку JPA для Hibernate ORM 6.1. Сюда входит поддержка новых функций Hibernate ORM 6.1, таких как возможность использовать несколько диалектов базы данных в одном приложении.
- Spring 6 обновляется до R2DBC 1.0. Сюда входит поддержка новых функций R2DBC 1.0, таких как возможность определять границы транзакций для соединений R2DBC.
- Spring 6 удаляет поддержку JCA CCI. Это связано с тем, что JCA CCI — это устаревшая технология, которая больше не поддерживается активно.
- Spring 6 согласовывает преобразование исключений доступа к данным между JDBC, R2DBC, JPA и Hibernate. Это означает, что вы увидите одни и те же типы исключений независимо от используемой вами технологии доступа к данным.
Весенние сообщения:
- Spring 6 Messaging поддерживает сведения о проблеме RFC 7807, который является стандартом для возврата ответов об ошибках, включающих информацию об ошибке, такую как код ошибки, сообщение и т. д.
- Spring 6 Messaging также включает новые функции Spring Integration, такие как поддержка библиотеки Reactor Netty и возможность асинхронной отправки и получения сообщений.
Весенний MVC:
- Spring MVC 6.0 теперь имеет встроенную поддержку проверки методов для параметров метода контроллера с аннотациями @Constraint. Это означает, что вам больше не нужен @Validated на уровне класса контроллера, чтобы включить проверку метода через прокси-сервер AOP.
- В Spring MVC 6.0 улучшена поддержка реактивных веб-приложений. Сюда входит поддержка библиотеки Reactor Netty и возможность асинхронной обработки запросов.
Весенний WebFlux:
- Spring WebFlux обновит свою реализацию Reactive Streams до версии 2.1 для улучшения совместимости.
- Ожидается, что Spring WebFlux добавит первоначальную поддержку нового протокола HTTP/3 для реактивной связи и связи с малой задержкой.
Тестирование:
- В Spring 6 Testing улучшена поддержка реактивного тестирования. Сюда входит поддержка библиотеки Reactor Netty и возможность писать асинхронные и неблокирующие тесты.
- Spring 6 Testing также включает новые функции Spring Boot Test, такие как поддержка библиотеки Reactor Netty и возможность писать асинхронные и неблокирующие тесты.
Что нового в Spring Boot 3
Базовая версия Java 17 и поддержка Java 19:
- Одним из наиболее значительных изменений в Spring Boot 3.0 является требование использования Java 17 в качестве базовой версии. Это означает, что Spring Boot 3.0 будет работать только на Java 17 или выше. Java 17 — это последняя версия Java с долгосрочной поддержкой (LTS), включающая ряд новых функций и улучшений.
- Spring Boot 3.0 также поддерживает Java 19, последнюю версию Java. Однако Java 19 не является версией LTS, поэтому ее не рекомендуется использовать в рабочей среде.
Управление зависимостями:
- Spring Boot 3.0 использует в качестве основы спецификацию Jakarta EE 9. Это означает, что все зависимости, управляемые Spring Boot, были обновлены для использования пакетов Jakarta EE 9.
- Если вы обновляете существующее приложение Spring Boot до Spring Boot 3.0, вам потребуется обновить зависимости в файле pom.xml или build.gradle, чтобы использовать пакеты Jakarta EE 9.
Собственные образы с GraalVM:
- GraalVM Native Image — это технология, которую можно использовать для предварительной компиляции Java-приложений (AOT) в собственный исполняемый файл. Это может значительно улучшить производительность Java-приложений.
Улучшено обнаружение @ConstructorBinding:
- Spring Boot 3.0 теперь может автоматически обнаруживать аннотации @ConstructorBinding в bean-компонентах. Это может упростить создание bean-компонентов, в которые вводятся зависимости.
Улучшения Log4j2:
- Spring Boot 3.0 включает ряд улучшений в Log4j2, платформе ведения журналов, используемой Spring Boot. Эти улучшения включают поддержку асинхронного ведения журналов, улучшенную производительность и повышенную безопасность.
Обновления микрометра:
- Spring Boot 3.0 включает обновления Micrometer, библиотеки метрик, используемой Spring Boot. Сбор метрик Spring Boot Actuator и отчетность будут улучшены. Такие показатели, как использование памяти, сбор мусора и т. д., будут собираться «из коробки».