Как объяснено в справочной документации Spring Boot, Spring Boot автоматически сконфигурирует приложение Spring MVC, если доступны оба MVC и WebFlux .Для этого есть несколько причин:
- Spring MVC не может работать в Netty
- , поскольку обе инфраструктуры будут конкурировать за одно и то же задание (например, обслуживание статических ресурсов, сопоставлений и т. Д.).)
- смешивание обеих моделей времени выполнения в одном и том же контейнере не является хорошей идеей и может плохо работать или совсем не работать
В зависимости от цели, к которой вы стремитесьВ этом случае может быть несколько способов работать с этим.
Если вы хотите использовать WebClient
для оптимизации одновременных удаленных вызовов HTTP и использовать операторы Reactor, вы можете продолжать использовать аннотированные контроллеры Spring MVC.и возвращать реактивные типы в качестве возвращаемых значений ( подробнее об этом в этом Spring Boot talk ).
Если вы хотите работать с чистой масштабируемостью и задержкой (поэтому необязательно необработанная пропускная способность),тогда вы можете начать использовать spring-boot-starter-webflux
и работать оттуда.Обратите внимание, что использование блокирующих API (например, блокирование вызовов базы данных) запрещено, а перенос их с Flux
или Mono
и планирование, которые работают в отдельных пулах потоков, будут работать против вас с точки зрения производительности.
Наконец,если вы хотите использовать функциональный подход, предоставляемый Spring WebFlux, то он не обязательно будет работать лучше.Это действительно зависит от вашего варианта использования и от того, как вы его реализуете.