Всем привет! ???? ???? ???? Мы Java-разработчики Тинькофф: Константин, Андрей и Арсений. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и решили делиться этим не только с коллегами, но и со всем сообществом.

???????? Добро пожаловать в волшебный мир Java, где декабрьский Java Digest обещает увлекательное приключение! В этом месяце Spring Boot 3.2.0 приносит поддержку виртуальных потоков, проекта CRaC, RestClient и JdbcClient. Kotlin 1.9.20 представляет стабильность Kotlin Multiplatform и улучшения производительности. В выпуске немного обновлений по JEP-ам, полезные статьи и видео. Пусть ваш декабрь будет полон кодовой магии и вдохновения. Mischief managed ????????????

Главные новости

Spring Framework 6.1 goes GA. Вышел General availability релиз Spring Framework 6.1. Из интересных фич: поддержка виртуальных потоков, RestClient и JdbcClient, а еще поддержка CRaC — Coordinated Restore at Checkpoint.

Spring Boot 3.2.0 available now — поддержка виртуальных потоков, проекта CRaC, RestClient и JdbcClient. Обзор релиза Spring Tips от Джоша Лонга. 

Вышел Kotlin 1.9.20. Из нового:

  • Компилятор K2 достиг статуса Beta для всех платформ — JVM, Native, JS и Wasm.

  • Kotlin Multiplatform теперь Stable, то есть готов для использования в проде.

  • В Kotlin Multiplatform реализовали полную поддержку конфигурационного кэша Gradle.

  • Реализована поддержка WI API в стандартной библиотеке Kotlin WASM.

  • Улучшена производительность в GC Kotlin/Native.

С полным списком изменений можно ознакомиться в соответствующем посте, и в release notes на GitHub. Кроме того, вышло традиционное видео от Антона Архипова. Следующая мажорная версия Kotlin будет уже 2.0.0, K2 станет компилятором по умолчанию для всех платформ.

Tackle Advent of Code 2023 With Kotlin and Win Prizes! 1 декабря стартовало мероприятие Advent of Code 2023. Двадцать пять дней организаторы будут проводить стримы, на каждом из которых будут давать по одному пазлеру. На него отводится 12 часов, после раскрывается решение. Приятное развлечение в преддверии Нового года ???? 

EqualsVerifier Delivers Improved Support for JPA Entities. Библиотека EqualsVerifier предназначена для проверки equals и hashCode. Лаконичный API позволяет писать тесты, состоящие буквально из одной строчки. И теперь в ней улучшили поддержку JPA entities.

Появились JEP-ы, которые войдут в Java 22.

JEP 447: Statements before super(...) (Preview). Появится возможность писать выражения перед super. Предоставьте разработчикам большую свободу в выражении поведения конструкторов, позволяя более естественно размещать логику, которую в настоящее время нужно разделять на вспомогательные статические методы, промежуточные конструкторы или аргументы конструкторов.

JEP 456: Unnamed Variables & Patterns. Java расширится безымянными переменными и шаблонами, которые можно использовать, когда требуются объявления переменных или вложенные шаблоны, но они никогда не используются. Оба обозначаются символом подчеркивания _.

JEP 457: Class-File API (Preview). Предоставит стандартный API для анализа, создания и преобразования файлов классов Java. Это предварительный API.

JEP 460: Vector API (Seventh Incubator). Внедрит API для выражения векторных вычислений, которые во время выполнения надежно компилируются в оптимальные векторные инструкции на поддерживаемых архитектурах ЦП, обеспечивая таким образом производительность, превосходящую эквивалентные скалярные вычисления.

JEP 463: Implicitly Declared Classes and Instance Main Methods (Second Preview).

Создан для того, чтобы учащиеся могли писать свои первые программы без понимания особенностей языка, предназначенных для больших программ. Вместо использования отдельного диалекта языка можно писать упрощенные объявления для одноклассовых программ, а затем плавно расширять свои программы, чтобы использовать более продвинутые функции по мере роста навыков разработчика. 

Интересные видео

Optimizing your equals() methods with Pattern Matching - JEP Cafe #21

За последнее время у нас появилось больше вариантов реализации equals(). Мы можем сгенерировать реализацию средствами IDE. Можем использовать библиотеку вроде Guava либо Apache Commons. А можем написать самостоятельно. При этом у нас появилась возможность использовать паттерн-матчинг. И не будем забывать про records — у них своя реализация equals(). Какой же из этих вариантов лучше с точки зрения производительности? В видео этот вопрос раскрывается очень скрупулезно и подробно.

Better Java Streams with Gatherers - Inside Java Newscast #57

В ролике Nicolay Parlog рассказывает о JEP-461, который пытается решить проблему того, что в Stream API есть кастомизируемая терминальная операция — collect, но нет удобного API для написания кастомизированных промежуточных операций. Предлагается ввести новую операцию gather, которая позволит еще более гибко пользоваться стримами.

Видеодайджест от Разбора полетов — интересный коллаб от Олега Чирухина и подкаста «Разбор полетов». За 30 минут успели обсудить поддержку JDK 21 в Wildfly 30, Spring Boot 3.2, подробности Spring Boot + CraC и многое другое. Надеемся, что подобный контент станет регулярным.

Полезные статьи

Downloading Java with Java Management Service: Script-friendly Oracle Java downloads now available through OCI объявление о запуске возможности скриптовых загрузок Java через Java Management Service с использованием службы Oracle Cloud Infrastructure. Новая функциональность разработана для удовлетворения потребностей разработчиков Java, администраторов и поставщиков программного обеспечения. Изучите информацию о том, как JMS Java Downloads позволяют загружать актуальные версии Java в автоматизированную систему сборки и развертывания с помощью загрузок, дружественных к скриптам, аутентификации на основе токенов и подробного отчета — в OCI, облачных сервисах сторонних разработчиков и в локальной среде, включая рабочие станции.

Finding CPU Load with JFR. JDK Flight Recorder, в быту JFR, — среда наблюдения и мониторинга, встроенная в JDK! Начиная с JDK 11, JFR стал open-source и переименован в JDK Flight Recorder. Это делает JFR отличным выбором для отслеживания скрытых проблем, связанных с тем, почему приложение потребляет ресурсы, такие как CPU. В статье — о том, как работать с JFR.

Introducing Generational ZGC. ZGC, высокомасштабируемый сборщик мусора Java с малой задержкой, был обновлен в JDK 21 и стал сборщиком мусора поколений с JEP 439. Как использовать Generational ZGC и какую производительность можно получить от перехода на него. Давайте взглянем!

Поддержка эмодзи в Java 21. До Java 21 не существовало стандартного API для оценки того, есть ли эмодзи, хотя эта информация была доступна в данных CLDR, включенных в JDK. Поскольку использование смайлов становится все более распространенным, появился JDK-8303018 для добавления API к java.lang.Character, чтобы дать разработчикам Java возможность проверять, используются ли смайлы.

Common Pitfalls of Integration Testing in Java. Отличный туториал, посвященный типичным проблемам интеграционных тестов. Зависимые друг от друга тесты, долгое время выполнения, проблемы с зависимостями, неудачный дизайн — все это реальные боли, и в статье предлагаются хорошие решения. Конечно же, с помощью Testcontainers ????

Table partitioning with Spring and Hibernate. Небольшая заметка от Vlad Mihalcea о работе с секционированными таблицами в Hibernate. В качестве примера рассматривается работа с таблицами, секционированными по региону, с использованием фильтров и достаточно новой аннотации @PartitionKey.

SSL hot reload in Spring Boot 3.2.0. Начиная со Spring Boot 3.2.0 появится поддержка горячего обновления SSL-сертификатов, без рестарта приложения. Может быть полезно.

SpringBoot 3.2 + CRaC — об использовании CRaC в Spring Boot 3.2. Рассматриваются автоматические и ручные чекпойнты, а еще есть бенчмарки времени старта приложения.

Пачка интересного контента от Олега Чирухина:

  • Helidon 4 вышел, а никто и не заметил. Вышла новая версия Helidon от Oracle. Автор делится своими мыслями на тему, почему этот инструмент вполне мог бы быть номером один среди Java-фреймворков.

  • Подборка недельных дайджестов с подробным описанием новостей из мира Java по неделям. Причем эти недельные дайджесты довольно объемные. Интересно, надолго ли хватит автора, но в любом случае ждем еще.

Просто интересное

Pets vs Cattle о том, почему нужно к коду и проекту относиться как к инструменту решения проблемы, а не как к детищу, которое нужно постоянно улучшать. То есть взвешивать выгоду и затраты на доработки.

Благодарности

Спасибо @rudikone, @Hockey1man и @IvanVakhrushev за помощь в подборке материалов дайджеста. Присылайте нам статьи, если хотите помочь или встретили что-то интересное, — опубликуем в следующем выпуске.

До встречи через месяц! 

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