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)


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки