Команда Spring АйО продолжает следить за выходом новых версий популярных технологий. В новом переводе рассказали про основные улучшения, которые вошли в состав Spring Boot 3.3. Среди них:
Поддержка Class Data Sharing (CDS)
Улучшение производительности виртуальных потоков для web-сокетов
Новые свойства для настройки Spring Data JDBC, GraphQL websocket, WebFlux и Tomcat
23 мая 2024 года компания VMware выпустила Spring Boot 3.3. Это обновление принесло значительные улучшения в производительности, безопасности и observability. Среди нововведений – Class Data Sharing (CDS) для более быстрого запуска приложений и снижения потребления оперативной памяти, поддержка виртуальных потоков для вебсокетов, расширенные опции безопасности с автоконфигурированием JWT аутентификации и поддержка Software Bill of Materials (SBOM) для улучшения безопасности публикации релизов. Обновление также включает расширенные опции подключения к сервисам Apache ActiveMQ и LDAP, поддержку Docker Compose для Bitnami Container Images и обновления для Spring-проектов и сторонних библиотек.
Release notes включают полный список изменений. Обновлённая документация теперь поддерживает поиск. В середине июня и середине июля соответственно вышли минорные версии Spring Boot 3.3.1 и 3.3.2.
Функция CDS, которая значительно сокращает время запуска и потребление памяти, была интегрирована в Spring Framework 6.1 в ноябре 2023 года. Теперь Spring Boot поддерживает создание CDS-совместимой структуры из fat JAR-файла с помощью режима "tools":
java -Djarmode=tools -jar your-application.jar extract
Эта команда создает <your-application>/<your-application>.jar
и помещает все библиотеки в виде отдельных JAR-файлов в папку your-application/lib
. Затем приложение запускается командой:
java -jar your-application/your-application.jar
Для отображения всех слоев используется следующая команда:
java -Djarmode=tools -jar your-application.jar list-layers
А используя следующую команду можно получить больше деталей:
java -Djarmode=tools -jar your-application.jar help <command>
Поддержка виртуальных потоков для веб-сокетов получила улучшения производительности. Однако в некоторых ситуациях виртуальные потоки могут быть не быстрее, чем пулы потоков, как показало недавнее исследование.
Теперь Spring Boot автоматически конфигурирует экземпляры классов JwtAuthenticationConverter или ReactiveJwtAuthenticationConverter из Spring Security, если значение задано одному из следующих свойств:
spring.security.oauth2.resourceserver.jwt.authority-prefix,
spring.security.oauth2.resourceserver.jwt.principal-claim-name или
spring.security.oauth2.resourceserver.jwt.authorities-claim-name.
В Spring Boot было удалено управление зависимостями для Dropwizard Metrics, от которого он никогда не зависел напрямую. Обновление Spring Boot также включило в себя переход на версию 1.x Prometheus Client (ранее использовалась версия 0.x) и Micrometer 1.13.
Spring Boot теперь предоставляет SBOM через новый endpoint actuator'а по адресу META-INF/sbom/bom.json или META-INF/sbom/application.cdx.json
. В POM-файле spring-boot-parent-starter
появились дополнительные опции для упрощенной конфигурации плагина SBOM.
Новая аннотация @BatchTransactionManager
упрощает настройку кастомного менеджера транзакций в Spring Batch. Tomcat, Netty и Undertow поддерживают Server Name Indication (SNI) для SSL. Запуск mvn spring-boot:run
под Windows теперь тоже работает со многими зависимостями. Также ресурсы, такие как SSL-сертификаты, теперь могут загружаться напрямую из конфигурационных файлов в виде значений, закодированных в Base64:
spring:
ssl:
bundle:
pem:
mybundle:
keystore:
certificate: "base64:LS0tLS1CRUdJTi..."
private-key: "base64:QmFnIEF0dHJpYn..."
Spring Boot 3.3 предлагает нативную поддержку подключения к сервисам для компонентов Apache ActiveMQ Classic и Artemis, а также для LDAP. Docker Compose теперь поддерживает образы Bitnami наряду с официальными образами для различных технологий, таких как Cassandra, Elasticsearch, MariaDB, MySQL, MongoDB, Neo4j, PostgreSQL, RabbitMQ и Redis.
В этом релизе обновлена версия Flyway до 10.10 для автоматической миграции структуры баз данных. Flyway 10 более модульный, чем предыдущие версии, и поддержка некоторых баз данных теперь перемещена в модули, специфичные для конкретных баз данных. Spring Boot теперь использует Infinispan 15, который повысил свою базовую версию Jakarta EE. Поэтому стандартные модули, такие как infinispan-core, заменили несколько *-jakarta модулей, таких как infinispan-core-jakarta.
Среди других значимых изменений — новые свойства для настройки диалектов Spring Data JDBC (spring.data.jdbc.dialect), конфигурация keep-alive для GraphQL websocket (spring.graphql.websocket.keep-alive), контроль над максимальным количеством сессий в приложениях WebFlux (server.reactive.session.max-sessions), и максимальный размер очереди соединителя веб-сервера Tomcat (server.tomcat.threads.max-queue-capacity).
Достойные упоминания обновления Spring зависимостей включают Spring Security 6.3.0, Spring Session 3.3.0, Spring Data 2024.0.0, Spring GraphQL 1.3.0, Spring Integration 6.3.0 и Spring Kafka 3.2.0. Обновления сторонних библиотек: Jackson 2.17, Hibernate 6.5, Liquibase 4.27, Oracle R2DBC 1.2.0, MySQL 8.3, Kafka 3.7, Brave 6.0, Zipkin 3.0, OpenTelemetry 1.37 и Mockito 5.11.
Согласно графику релизов Spring Boot, компания VMware планирует выпустить Spring Boot 3.4 21 ноября 2024 года, через неделю после запланированного релиза Spring Framework 6.2.
Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
Ждем всех, присоединяйтесь!
tolkkv
Функция CDS, которая значительно сокращает время запуска и потребление памяти, была интегрирована в Spring Framework 6.1 в ноябре 2023 года. Теперь Spring Boot поддерживает создание CDS-совместимой структуры из fat JAR-файла с помощью режима "tools":
В случае реальных приложений пока не видел "значительного сокращения" :) Было прикольно увидеть чей то реальный опыт, где добились какого то значительного ускорения
Antgor
Очень сомнительно, что в рантайме будет профит по времени запуска. На прогрев JVM больше влияют параметры типа TieredCompilation. А по памяти разницы вообще не должно быть. Мы же не грузим в память всю либу зависимостей, а только используемые классы в Metaspace по мере обращения к ним.
Практическая польза может быть в случае использования контейнеров. Если мы значительное число релизов едем не обновляя зависимости, то легко можно сформировать docker image с зависимостями и вкатывать следующим слоем application. Можно чуть-чуть сэкономить на времени сборки. А если артефакт должен отправлятьься в географически распределенные ДЦ, то и немало.