Spring Boot: веб-приложения с Spring WebFlux Framework
Spring WebFlux - это новый реактивный веб-фреймворк, представленный в Spring Framework 5.0. В отличие от Spring MVC, он не требует API сервлета, является полностью асинхронным и неблокирующим, а также реализует спецификацию Reactive Streams через проект Reactor.
Spring WebFlux поставляется в двух вариантах: функциональном и на основе аннотаций. Основанная на аннотациях модель довольно близка к модели Spring MVC, как показано в следующем примере:
@RestController
@RequestMapping("/users")
public class MyRestController {
@GetMapping("/{user}")
public Mono<User> getUser(@PathVariable Long user) {
// ...
}
@GetMapping("/{user}/customers")
public Flux<Customer> getUserCustomers(@PathVariable Long user) {
// ...
}
@DeleteMapping("/{user}")
public Mono<User> deleteUser(@PathVariable Long user) {
// ...
}
}
“WebFlux.fn”, функциональный вариант, отделяет конфигурацию маршрутизации от фактической обработки запросов, как показано в следующем примере:
@Configuration(proxyBeanMethods = false)
public class RoutingConfiguration {
@Bean
public RouterFunction<ServerResponse> monoRouterFunction(UserHandler userHandler) {
return route(GET("/{user}").and(accept(APPLICATION_JSON)), userHandler::getUser)
.andRoute(GET("/{user}/customers").and(accept(APPLICATION_JSON)), userHandler::getUserCustomers)
.andRoute(DELETE("/{user}").and(accept(APPLICATION_JSON)), userHandler::deleteUser);
}
}
@Component
public class UserHandler {
public Mono<ServerResponse> getUser(ServerRequest request) {
// ...
}
public Mono<ServerResponse> getUserCustomers(ServerRequest request) {
// ...
}
public Mono<ServerResponse> deleteUser(ServerRequest request) {
// ...
}
}
WebFlux является частью Spring Framework.
Вы можете определить столько bean-компонентов RouterFunction, сколько захотите, чтобы сделать определение маршрутизатора модульным. Beans можно упорядочить, если вам нужно применить приоритет.
Для начала добавьте модуль spring-boot-starter-webflux в ваше приложение.
Добавление в приложение модулей spring-boot-starter-web и spring-boot-starter-webflux приводит к автоматической настройке Spring Boot Spring MVC, а не к WebFlux. Это поведение было выбрано потому, что многие разработчики Spring добавляют spring-boot-starter-webflux в свое приложение Spring MVC для использования реактивного WebClient. Вы можете применить свой выбор, установив для выбранного типа приложения значение SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE)
Читайте также:
- Spring Boot: разработка веб-приложений
- Разработка вашего первого Spring Boot приложения
- Spring Boot стартеры
Комментарии
Отправить комментарий