14 июля вышла новая версия Java фреймворка Micronaut. С последнего мажорного обновления прошло почти два года (оно было 18.08.2021), и за это время произошло немало событий как в мире Java-разработки, так и в самом фреймворке. Постараюсь рассказать, что же нового появилось в Micronaut. Micronaut framework 4 теперь по умолчанию будет использовать  Apache Groovy 4, Kotlin 1.8 и Java 17. При использовании Kotlin, теперь можно собирать приложение Micronaut с помощью KSP (Kotlin Symbol Processing). Поскольку KSP на данный момент поддерживается только Gradle, Kapt всё ещё доступен для Gradle и Maven. Также Micronaut Kotlin теперь использует Ktor 2. Micronaut framework 4 поддерживает последий релиз GraalVM и перешел на runtime-инициализацию GraalVM, чтобы обеспечить согласованность в поведении между JIT и нативными приложениями. Дополнительно, необходимая метадата для GraalVM теперь находится в GraalVM Reachability Metadata Repository, и оба плагина Micronaut для Gradle и Maven используют её по умолчанию. Micronaut Foundation заявляет, что продолжит работать над интеграцией с GraalVM для достижения наилучшего опыта его использования. Например, добавлены нативные JUnit5 тесты во всю инфраструктура Micronaut. Для сборки приложения Micronaut framework 4 теперь использует Gradle не ниже 8-й версии. Micronaut framework 4 представляет язык выражений, который позволяет использовать выражения в аннотациях. Язык выражений Micronaut спроектирован так, что он безопасен по умолчанию. Невозможно скомпилировать выражение в рантайме из ненадёжного пользовательского ввода. Все выражения проверяются во время компиляции, проводится проверка типов. Также они не используют рефлексию, так что они доступны к использованию с GraalVM. Например, теперь можно использовать выражения с Micronaut Security в аннотации @Secured. Micronaut framework 4 может определять поддержку виртуальных потоков (которые доступны с Java 19 в качестве preview feature), и использовать их для executor'ов с именем BLOCKING. Если версия Java не поддерживает виртуальные потоки, фреймворк будет присваивать алиас IO. Вы можете заранее заменить @ExecutesOn(IO) на @Executes(BLOCKING). HTTP слой был переписан, чтобы улучшить производительность и уменьшить применение реактивного стека, если он в целом не используется (например, с виртуальными потоками). Micronaut framework 4 добавил экспериментальную поддержку HTTP/3 и экспериментальную поддержку для io_uring через инкубатор проектов Netty. Добавлены фильтры, основанные на аннотациях. Обычно нужно было писать серверные и клиентские фильтры. Теперь же можно создать фильтр, не написав ни одной строчки реактивного кода. При использовании с Виртуальными Потоками (Virtual Threads) фреймворк оптимизирует производительность, убирая неважные участки кода с реактивным стеком. Предложена новая имплементация Micronaut HTTP Client. Можно продолжать использовать клиент, основанный на Netty, или же использовать более лёгкую версию клиента, основанную на Java HTTP Client. Gradle и Maven плагины поддерживают генерацию кода для HTTP клиента или сервера из переданного файла спецификаций OpenAPI. Убрана транзитивная зависимость SnakeYAML. Убрана транзитивная зависимость Micronaut Jackson Databind. Теперь это ответственность разработчика выбрать, что использовать - Micronaut Serialization или Micronaut Jackson databind. Окончен переход на Jakarta. Список изменений: javax.validation = jakarta.validation javax.mail = jakarta.validation javax.transaction.Transactional = jakarta.transaction.Transactional javax.persistence = jakarta.persistence Micronaut Validation был перемещён в новый репозиторий, и теперь включает в себя поддержку Bean Validation 3. Была расширена метадата аннотаций времени компиляции (compilation time annotation metadata), что позволило добавить поддержку аннотаций на обобщённые (generic) типы. Например: Встроенные ранее модули Validation, Retry, Service Discovery, HTTP Session и WebSocket теперь представлены обособленно, что позволяет отказаться от неиспользуемых модулей. Также, был переписан компилятор, что позволило вычленить типы только для компиляции в отдельный модуль (core-processor), который больше не находится в classpath пользователя или рантайм. Это позволило избавиться от некоторых переупакованных версий ASM и Caffeine. Чтобы избежать потери в производительности при определении облачных environment каждый раз, когда запускается приложение или его тесты, данная функциональность теперь по умолчанию будет отключена. Если приложение зависит от этих переменных, следует обратиться к документации по Cloud Configuration. Либо же установить явно переменные Micronaut для продакшен-окружения. Теперь можно инжектить java.util.Map бинов, где ключ - это имя бина. Имя бина определяется по qualifier или, если такового нет, используется имя класса. Теперь можно произвольно вкладывать и комбинировать @ConfigurationProperties и @EachProperty аннотации, что позволяет добиться большей гибкости при настройке. Если бин не создался по причине отсутствующей конфигурации, будет выведено сообщение, какой именно конфигурации не хватает (например, если бин использует @EachProperty). Когда бин, аннотированный @EachProperty или @Bean, не найден из-за отсутствующей конфигурации, выбрасывается ошибка, в которой указывается префикс конфигурации, необходимый для устранения проблемы. Теперь бины, которые были отключены через Bean Requirements, отслеживаются, и возникает соответствующая ошибка, если бин был отключен. Отключенные бины видны через Beans Endpoint, что помогает понять состояние конфигурации приложения. Это даёт возможность лучше понять, какие бины активны и доступны в приложении, а какие были отключены и не используются. Добавлена поддержка для  Hibernate 6, Hibernate Reactive 2, и Oracle JSON-Relational Duality Views. Micronaut framework поддерживает множество различных среды исполнения: Netty Servlet (Jetty, Undertow и Tomcat) Serverless (AWS Lambda, Google Cloud Http Functions и Azure HTTP functions) В MIcronaut framework 4 каждая среда теперь совместима с тестами на соответствие HTTP серверу (HTTP server Test Compability Kit). Добавлена имплементация, основанная на HiveMQ MQTT Client В Object Storage добавлено Local Storage для упрощения локальной разработки и тестирования. Модуль GraphQL теперь поддерживает современный graphql-ws протокол для подписки через Web-сокеты Добавлена поддержка client basic authentication для Spring Cloud. Добавлен новый модуль – Micronaut Control Panel, который предоставляет графический веб интерфейс для контроля и управления состояниями Micronaut приложений. Удобно использовать в при разработке. Сделана масштабная переделка интеграции с AWS Lambda. В этом релизе Micronaut AWS предлагает встроенные обработчики Lambda для Amazon API Gateway payloads v1 и v2 и обработчик для Application Load Balancer. Интеграция с Lambda больше не зависит от библиотеки AWS Serverless Java container. Более того, micronaut-function-aws предоставляет реализацию com.amazonaws.services.lambda.runtime.CustomPojoSerializer, которая загружается через SPI (Service Provider Interface). Это позволяет избежать дополнительных накладных расходов на функцию Micronaut при использовании библиотеки сериализации внутри функции Lambda. Кроме того, новый модуль io.micronaut.aws:micronaut-aws-lambda-events-serde позволяет использовать Micronaut Serialization с событиями AWS Lambda Java. Это даёт возможность использовать мощные средства сериализации Micronaut для обработки событий в Lambda функциях, что улучшает производительность и обеспечивает более гибкий и удобный способ работы с данными в Lambda среде. Micronaut ElasticSearch обновлён до ElasticSearch 8.8. Micronaut Flyway обновлён до Flyway 9. Micronaut Hibernate Validator обновлён до Hibernate Validator 8. Micronaut Kafka обновлён до Kafka 3. Micronaut Neo4J обновлён до Neo4j 5. Micronaut RabbitMQ обновлён до AMQP Java Client 5. Micronaut Micrometer обновлён до io.dropwizard.metrics:metrics-core версии 4.2.19 и micrometer версии 1.11.1. Micronaut Liquibase обновлён до Liquibase 4.22.0. Micronaut SQL обновлён до PostgreSQL версии 42.6.0, MariaDB Java Client версии 3.1.4, Hibernate версии 6.2.6.final, Hibernate Reactive версии 2.0.2.Final, Jasync версии 2.2.0 и Vertx версии 4.4.4. Micronaut Azure обновлён до Azure SDK версии 1.2.4, Azure Cosmos DB версии 4.46.0 и Azure Functions Java Library версии 3.0.0. Micronaut AWS обновлён до Alexa SDK версии 2.71.0, AWS SDK v1 версии 1.21.505, AWS SDK v2 версии 2.20.100, AWS Lambda Events версии 3.11.2, AWS Lambda Serialization версии 1.1.2 и AWS Lambda SDK версии 1.2.2. Micronaut GCP обновлён до Google Cloud Core версии 2.18.1, Google Cloud PubSub версии 1.123.17, Google Secret Manager версии 2.18.0, Google Cloud Events Types версии 0.3.0, Google Auth Library OAuth2 HTTP версии 1.17.0, Google Functions Frameworks API версии 1.0.4 и Google Function Invoker версии 1.2.1. Как видно, команда разработки Micronaut продолжает совершенствовать свой продукт. Обновления выходят регулярно, в прошлую пятницу уже появился минорный апдейт. Список компаний, которые используют данный фреймворк также растет, значит, в этом есть необходимость. Кому интересно, вот здесь я писал про то, как устроена аутентификация в Micronaut.  Senior Java Developer