Всем привет! ? ? ? ? Мы — 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. 

Спасибо за прочтение! Ждем от вас обратную связь в комментариях. Увидимся через месяц ?

Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске!

Комментарии (0)