Что такое Micronaut
Micronaut — фреймворк для серверных приложений на Java: REST API, микросервисов, консольных утилит. Он принимает HTTP-запросы, превращает объекты в JSON и обратно, работает с базой данных, проверяет права доступа и вызывает другие сервисы. Главная особенность Micronaut — почти всю подготовительную работу он делает во время компиляции, а не при запуске, поэтому приложение стартует за секунду и расходует мало памяти.
Работа при компиляции
Фреймворку нужно знать, какие классы являются контроллерами, какие объекты кому передать, какие поля есть у записи для JSON. Spring узнаёт это при запуске: просматривает классы, читает аннотации через рефлексию (чтение устройства класса во время работы программы) и строит прокси. Micronaut делает то же самое заранее — через обработчики аннотаций (annotation processors). Это плагины компилятора javac: пока компилируется ваш код, они читают аннотации и генерируют дополнительные классы.
Например, для контроллера ArticleController после сборки в папке target/classes/com/example/ появятся файлы:
$ArticleController$Definition.class
$ArticleController$Definition$Exec.class
ArticleController.classКласс $ArticleController$Definition — готовый «рецепт» создания контроллера: какой конструктор вызвать и что в него передать. При запуске Micronaut просто читает эти рецепты.
| Что даёт подход | Почему |
|---|---|
| Быстрый старт | Не нужно сканировать классы и читать аннотации |
| Мало памяти | Нет кешей рефлексии и динамических прокси |
| Ошибки раньше | Часть ошибок видна уже при компиляции |
| Нативная сборка | Без рефлексии GraalVM легко собирает приложение в исполняемый файл |
Чем отличается от Spring Boot
Аннотации похожи, поэтому после Spring перейти легко:
| Задача | Spring Boot | Micronaut |
|---|---|---|
| Контроллер | @RestController | @Controller |
| Маршрут GET | @GetMapping | @Get |
| Компонент | @Service, @Component | @Singleton |
| Настройки | @ConfigurationProperties | @ConfigurationProperties |
| Репозиторий | Spring Data | Micronaut Data |
| Когда собирается DI | при запуске | при компиляции |
Цена подхода — после изменения зависимостей в pom.xml иногда нужна полная пересборка, а обработчики аннотаций должны быть подключены в сборке. Об этом будет «Частая ошибка» в нескольких уроках.
Версия в курсе
Курс написан для Micronaut 5.2 и Java 25: Micronaut 5 требует JDK 25 как минимум. Сборка — Maven, тесты — JUnit. Проверьте Java:
java -versionКоманда должна показать версию 25 или новее. Maven ставить отдельно не нужно: в проекте будет обёртка mvnw, она скачает Maven сама.
Что мы построим
Через весь курс мы делаем REST API блога:
- Статьи
/articles: список, поиск, создание, изменение, удаление. - Комментарии к статьям и база данных H2 через Micronaut Data JDBC.
- Проверку данных, обработку ошибок, настройки.
- HTTP-клиент, тесты, вход по паролю и JWT, задачи по расписанию, проверку здоровья.
- Сборку в jar и рассказ о нативной сборке GraalVM.
Запросы к API будем отправлять утилитой curl — она есть в Windows 10+, macOS и Linux.
Частая ошибка
Если запустить сборку на старой Java, Maven упадёт ещё до компиляции вашего кода. Вот что выводит JDK 16:
java.lang.UnsupportedClassVersionError: io/micronaut/maven/testresources/TestResourcesLifecycleExtension
has been compiled by a more recent version of the Java Runtime (class file version 69.0),
this version of the Java Runtime only recognizes class file versions up to 60.0Версия файла 69 соответствует Java 25. Установите JDK 25 и проверьте, что переменная JAVA_HOME указывает именно на него.