Всем привет! 👋 👋 👋 👋 Мы — Java-разработчики Т-Банка: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.
В этом выпуске — самые свежие новости из мира Java и сопутствующих технологий. JDK 23 изменяет политику обработки аннотаций, требуя дополнительной опции командной строки. Вышла новая версия Spring Framework 6.2.0-M4 с улучшениями в ядре, тестировании и поддержке Protobuf 4.x. Maven Central вводит ограничения на загрузку для крупных проектов. Новые сборки раннего доступа JDK 24 и Leyden, а также еще много всего интересного. Приятного чтения!
Главные новости
Quality Outreach Heads-up — JDK 23: Changes Default Annotation Processing Policy Начиная с JDK 23, javac требует дополнительной опции командной строки для включения обработки аннотаций. Параметр -proc может принимать значения: none, only, full. Начиная с JDK 23 должна быть хотя бы одна опция командной строки для обработки аннотаций.
Spring Framework 6.2.0-M4 available now. Основные изменения:
Ядро и тестирование: Task и ScheduledTask предоставляют метаданные о выполнении.
Улучшена поддержка @TestBean и @MockitoBean.
Интернет и обмен сообщениями: @ExceptionHandler стал более гибким, поддерживает согласование контента.
Сообщество запросило и получило улучшения: RestClient поддерживает атрибуты запросов, кодеки и конвертеры поддерживают Protobuf 4.x.
Новая функция CHIPS требует изменений в приложениях, использующих сторонние файлы cookie.
Реактивные веб-серверы поддерживают разделенные файлы cookie.
Поддержка привязки данных от заголовков HTTP-запросов до аргументов метода контроллера @ModelAttribute.
Maven Central and the tragedy of the commons. Maven Central теперь будет замедлять загрузку или вовсе выдавать 429 ошибку, для особо «тяжелых» потребителей.
Мнение: Хотя это может вызвать неудобства для больших проектов, это справедливая мера для защиты общей инфраструктуры.
Java on Visual Studio Code Update — June 2024. Вышло июньское обновление Java on VSCode:
— Вынесли настройки по разным секциям.
— Выложили новое видео, посвященное Code Coverage.
— Появились валидации JPQL- и HQL-запросов — самое полезное, имхо.
OpenJDK JDK 24 Early-Access Builds. Стали доступны Early-Access сборки JDK 24. Создатели напоминают, что функции раннего доступа (EA) могут так и не появиться в версии для общего доступа (GA). Функциональность EA может быть изменена или удалена в любое время. Наличие сборок EA не означает, что тестируемая функция будет присутствовать в каком-либо конкретном выпуске GA.
Vaadin 24.4.1. Вышла новая версия фреймворка Vaadin 24.4.1. Из основных нововведений: интеграция с Copilot и поддержка React. Благодаря Copilot появилась поддержка редактирования через drag-and-drop, настройки тем, модификации и генерации кода на основе искусственного интеллекта.
Quality Outreach Heads-up — New Leyden Early-Access Builds. Вышла сборка Leyden — первая сборка для раннего доступа, ориентированная на улучшение времени запуска Java-приложений. Сборка включает заблаговременную компиляцию методов Java, разрешение постоянных записей пула, генерацию динамических прокси-серверов и данных отражения.
Арсений
Если вы, как и я, следили за проектом — возможно, самое время попробовать. Это нововведение особенно интересно для разработчиков, стремящихся оптимизировать время запуска своих приложений.
Quality Outreach Heads-up — New Loom Early-Access Builds. Группа OpenJDK продвигает тестирование FOSS-проектов с использованием сборок OpenJDK для повышения качества выпуска. Project Loom опубликовал новые сборки для раннего доступа с улучшенной реализацией object monitor. Цель — оценить надежность и производительность изменений в сборках Loom.
Интересные видео
How-to Build Custom Java Runtimes with Jlink. Видео о создании пользовательского образа среды выполнения с помощью инструмента командной строки jlink. Создается образ, который содержит только те модули, которые нужны приложению, что уменьшает размер приложения и повышает безопасность.
All Java 23 Features - Inside Java Newscast #70. Java 23 выходит только 17 сентября, но мы уже можем ознакомиться со списком изменений, которые будут в ней представлены. В основном это превью-фичи: примитивные паттерны, Stream Gatherer-ы, Class-File API и так далее. Из стабильного — ZGC теперь по умолчанию использует режим generational, javadoc поддерживает Markdown, а Vector API все так же находится в инкубаторе в ожидании проекта Valhalla 🙂 Ну и, разумеется, самое шокирующее — String Templates были отправлены на доработку и не попадают в этот релиз. И, кстати, об этом…
What Happened to Java's String Templates? Inside Java Newscast #71. Из этого видео вы узнаете, почему String Templates не попадут в Java 23. Помимо этого будет объяснение, почему фича была задизайнена именно так. Очень интересно послушать, чем руководствовались разработчики, принимая те или иные решения как с точки зрения безопасности, так и с точки зрения удобства использования.
Олег Естехин — Как готовить свой код к виртуальным потокам. Олег рассказал на что нужно обратить внимание в своем коде, если вы планируете использовать виртуальные потоки. Докладчик приводит конкретные решения для различных кейсов и объясняет, почему из-за пининга виртуальных потоков приложение могло зависнуть, как этого избежать и почему сейчас этого можно уже не бояться.
Рустам Курамшин — Правильный DevOps для Spring Boot и Java. В докладе рассматриваются следующие темы: оптимизация сборки образа приложения, изменение конфигурации приложения без релиза и выделение накатки миграции на БД в отдельную джобу. Все три темы раскрыты очень хорошо.
Арсений
Доклад очень практичный, рекомендую посмотреть. Мне особенно понравилась тема изменения конфигурации без релиза, так как это важный аспект для поддержания гибкости и непрерывности в разработке.
Полезные статьи
Addressing Fragmentation in ZGC through Custom Allocators Исследование направлено на уменьшение фрагментации в ZGC с помощью пользовательских распределителей. Цель исследования — уменьшить необходимость перемещения объектов в ZGC за счет использования распределителя на основе свободного списка.
Арсений
Отличная статья, описанные действия могут значительно улучшить производительность приложений, использующих ZGC.
Hack a Java application with the debugger В статье автор рассматривает использование дебаггера для взаимодействия и изменения поведения JVM-приложений в режиме реального времени. Автор демонстрирует примеры изменения значений переменных и вызова методов приложения через отладчик, что позволяет вносить изменения в приложение без его перезапуска.
Hibernate JAVA_TIME_USE_DIRECT_JDBC setting Небольшая статья Vlad Mihalcea о настройке в Hibernate, которая позволяет маппить типы времени из java.time напрямую, без прослойки в виде объекта Timestamp. А еще рассматривается то, какими драйверами для популярных БД это поддерживается.
Hibernate WITH RECURSIVE query Еще одна небольшая статья Vlad Michalcea посвящена запросам WITH RECURSIVE в Hibernate. Описано, как они работают и как могут быть использованы для иерархических структур данных.
Getting Started with Jakarta Data and Hibernate (thorben-janssen.com) Статья о репозиториях в Jakarta Data — новой спецификации в Jakarta EE, о которой мы рассказывали в одном из прошлых дайджестов. В статье описаны тонкости работы с репозиториями — они используют StatelessSession, а еще приводится реализация основных CRUD-операций и более сложных запросов. Все подкреплено примерами кода.
How to map Java Enum to custom values with JPA and Hibernate — Vlad Mihalcea Еще одна заметка от Vlad Mihalce, в которой рассказывается о том, как маппить Enum не в имя или порядковый номер, а в какое-то кастомное поле, содержащееся в енаме, используя для этого кастомный конвертер.
How to Identify Dependencies in Your Codebase During Microservices Migration Интересный туториал о миграции с монолита на микросервисы. Автор рассказывает, как можно использовать плагин Digma для сбора информации о зависимостях внутри вашей кодовой базы, что очень важно, если вы задумали подобный масштабный рефакторинг.
Virtual vs Platform Threads When blocking operations return too fast Еще один материал о производительности виртуальных потоков в Java. Рассказывается про недостаток виртуальных потоков: если блокирующие I/O-операции короткие, то виртуальные потоки не просто не быстрее обычных платформенных потоков, но даже менее производительны из-за планировщика.
Арсений
Отличное напоминание, что виртуальные потоки не являются серебряной пулей и нужно четко понимать, какие задачи решает технология.
Эффективность Spring-приложений в рантайме. Текущее состояние дел и планы на будущее Перевод статьи об оптимизации Spring-приложений. Рассматриваются как уже доступные GraalVM Native Image и Project CRaC, так и будущие оптимизации, входящие в Project Leyden.
Любопытные подкасты
#62 — Андрей Кулешов — Kotlin, технические конференции, Spring, диктат в анализе кода и kotlinx.serialization. Вопрос выработки единого Code Style встает перед каждой командой разработки, но ему часто уделяется недостаточно внимания, ведь он кажется не самым важным и приоритетным.
Да и убеждения о том, как должен быть отформатирован код, чтобы его было удобно читать, очень разнятся у разных разработчиков. Андрей Кулешов рассказывает о своем опыте внедрения этой практики и о разработке соответствующей библиотеки diktat для Kotlin. Кроме того, затрагиваются темы сериализации, компиляторных плагинов, конференций, а также будущего языков Java и Kotlin.
Спасибо за прочтение! Ждем от вас обратную связь в комментариях. Увидимся через месяц 😉
Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске!