|
| 1 | +# Многопоточность в Spring |
| 2 | + |
| 3 | +В этом домашнем задании мы познакомимся с модулем Spring WebFlux, который позволяет писать асинхронный неблокирующий код. Он несколько отличается от привычного Spring MVC. Чтобы понять разницу, напишем простой CRUD сущности с использованием этого модуля. |
| 4 | + |
| 5 | +## Ссылки |
| 6 | + |
| 7 | +* [Пример простого приложения на Spring WebFlux](https://www.baeldung.com/spring-webflux) |
| 8 | +* [Репозиторий ReactiveCrudRepository](https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/reactive/ReactiveCrudRepository.html) |
| 9 | + |
| 10 | +## build.gradle |
| 11 | + |
| 12 | +## Задачи |
| 13 | + |
| 14 | +* Изучите код в файле *build.gradle*. Обратите внимание, какие зависимости нужны для реактивного приложения. |
| 15 | + |
| 16 | +## src/main/resources/application.yml |
| 17 | + |
| 18 | +## Задачи |
| 19 | + |
| 20 | +* Изучите конфигурацию приложения. Обратите внимание на комментарии в коде |
| 21 | + |
| 22 | +## src/main/java/exercise/model/User.java |
| 23 | + |
| 24 | +В этом файле находится модель пользователя. |
| 25 | + |
| 26 | +## Задачи |
| 27 | + |
| 28 | +* Изучите код модели. Обратите внимание на то, что аннотации `javax.persistance` не используются в Spring Webflux. |
| 29 | + |
| 30 | +## src/main/java/exercise/repository/UserRepository.java |
| 31 | + |
| 32 | +В этом файле нужно создать репозиторий для общих операций CRUD с использованием типов Project Reactor. |
| 33 | + |
| 34 | +## Задачи |
| 35 | + |
| 36 | +* Создайте репозиторий `UserRepository`, который будет реализовывать интерфейс `ReactiveCrudRepository`. Этот интерфейс позволяет использовать типы Project Reactor. Большинство нужных методов уже определены в этом интерфейсе, изучите их в документации. Более сложные специфические запросы при необходимости можно определить, добавив аннотацию @Query к методу и указав фактический sql. Но в случае нашего простого CRUD делать этого не понадобится. |
| 37 | + |
| 38 | +## src/main/java/exercise/service/UserService.java |
| 39 | + |
| 40 | +Бизнес-логику нашего приложения вынесем в отдельный сервис. В файле уже создан класс сервиса `UserService`, который будет использовать наш репозиторий, и один из методов. |
| 41 | + |
| 42 | +## Задачи |
| 43 | + |
| 44 | +* Добавьте в класс остальные методы для реализации основных CRUD операций с сущностью пользователя: создание нового пользователя, просмотр конкретного пользователя, обновление и удаление пользователя. Методы сервиса должны возвращать тип Project Reactor `Mono<T>`. |
| 45 | + |
| 46 | +## src/main/java/exercise/controller/UserController.java |
| 47 | + |
| 48 | +В файле создан контроллер `UserController`, который обрабатывает запросы к приложению, и один из методов. Контроллер использует сервис `UserService`. В Spring WebFlux существует два подхода при создании контроллера: использование аннотаций и функциональный способ. Подход, основанный на аннотациях `org.springframework.web.bind.annotation` уже знаком нам, поэтому мы будем использовать его. |
| 49 | + |
| 50 | +## Задачи |
| 51 | + |
| 52 | +* Допишите необходимые методы, которые будут обрабатывать запросы на создание нового пользователя, просмотр, редактирование и удаление пользователя. Методы контроллера должны возвращать тип `Mono<T>`. |
| 53 | + |
| 54 | +* Запустите приложение. При помощи Postman попробуйте отправлять различные запросы. Убедитесь, что выполненные запросы отражаются на базе данных. |
| 55 | + |
| 56 | +## Подсказки |
| 57 | + |
| 58 | +* При необходимости подглядывайте в тесты за дополнительной информацией по работе приложения |
| 59 | + |
| 60 | +* Изначально при старте приложения база данных пуста. Чтобы проверить работу приложения, нужно будет сначала самостоятельно добавить нескольких пользователей. |
0 commit comments