Оглавление
Micronaut
Лёгкий фреймворк для микросервисов: внедрение зависимостей при компиляции, HTTP, данные и тесты.
1.Начало работы
- Что такое MicronautЗачем нужен Micronaut, как устроено внедрение зависимостей при компиляции, чем он отличается от Spring Boot и что мы построим в курсе.
- Создание и запуск проектаКак создать проект Micronaut на launch.micronaut.io или командой mn create-app, из чего он состоит и как его запустить.
- Контроллеры и маршрутыКак в Micronaut написать контроллер с аннотациями @Controller и @Get, как задаются маршруты и HTTP-методы.
- Параметры запросаКак получить в контроллере Micronaut переменные пути, параметры строки запроса и заголовки: @PathVariable, @QueryValue, @Header, значения по умолчанию.
- JSON, записи и @SerdeableКак контроллер Micronaut принимает и возвращает JSON: записи Java, аннотация @Serdeable из Micronaut Serialization, @Body и ответ 201 Created.
2.Основы приложения
- Внедрение зависимостей и биныЧто такое бин в Micronaut, как работают @Singleton и внедрение через конструктор, какие бывают области видимости и как создать бин из чужого класса через @Factory.
- Настройки и окруженияФайл application.properties в Micronaut, чтение значений через @Value и @ConfigurationProperties, переменные окружения и окружения dev и prod.
- Проверка данныхВалидация входных данных в Micronaut: подключение micronaut-validation, аннотации @NotBlank и @Size на записи, @Valid в контроллере и ответ 400.
- Обработка ошибокКак в Micronaut вернуть клиенту 404 и другие коды: Optional, HttpStatusException, собственное исключение и обработчик ExceptionHandler.
3.База данных
- Micronaut Data JDBC и H2Подключение базы данных H2 и Micronaut Data JDBC: зависимости, настройки источника данных, сущность @MappedEntity и репозиторий CrudRepository.
- Запросы в репозиторияхЗапросы Micronaut Data по имени метода (findByTitleContains, countBy, OrderBy), свой SQL через @Query, постраничный вывод Pageable и комментарии к статьям.
- ТранзакцииАннотация @Transactional в Micronaut Data: несколько запросов как одно целое, откат при исключении и ограничения AOP.
4.Клиенты, тесты и безопасность
- Декларативный HTTP-клиентКак вызвать другой сервис из Micronaut: интерфейс с @Client, адрес сервиса в настройках, Optional для ответа 404.
- Тестирование с @MicronautTestТесты Micronaut на JUnit: аннотация @MicronautTest, HTTP-клиент для вызова своего API, внедрение бинов в тест и подмена бина через @MockBean.
- Основы безопасностиMicronaut Security: подключение модуля, проверка логина и пароля в HttpRequestAuthenticationProvider, правила доступа @Secured и роли.
- Вход по токену JWTКак в Micronaut Security выдавать токен JWT через /login и принимать его в заголовке Authorization: Bearer, где хранить секрет подписи.
- Задачи по расписаниюАннотация @Scheduled в Micronaut: запуск метода через интервал (fixedDelay, fixedRate), по cron-выражению и с интервалом из настроек.
- Служебные эндпоинты и /healthМодуль micronaut-management: проверка здоровья /health, сведения /info, чувствительные эндпоинты и их защита.
5.Сборка и запуск
- Сборка и запуск jarКак собрать приложение Micronaut в один исполняемый jar, запустить его через java -jar и передать настройки сервера переменными окружения.
- Нативная сборка GraalVMЧто такое нативный образ GraalVM, почему Micronaut хорошо для него подходит, как собрать приложение командой -Dpackaging=native-image и чем за это платят.