Ответ
Spring Boot Starter Web использует синхронный, блокирующий стек на основе Spring MVC и сервлетов (Tomcat по умолчанию). Подходит для традиционных приложений с реляционными БД и шаблоном Thread-per-Request.
Spring Boot Starter WebFlux построен на реактивном стеке Project Reactor, использует неблокирующий I/O (Netty по умолчанию) и модель event-loop. Предназначен для высоконагруженных систем, микросервисов и потоковой обработки с поддержкой backpressure.
Ключевые отличия:
- Архитектура: Синхронная (Web) vs. Асинхронная, неблокирующая (WebFlux).
- Модель потоков: Thread-per-Request (Web) vs. Малое число потоков event-loop (WebFlux).
- Зависимости: Servlet API (Web) vs. Reactive Streams (WebFlux).
- Конкурентность: Лучше для CPU-интенсивных задач (Web) vs. Лучше для I/O-интенсивных задач (WebFlux).
Пример контроллера WebFlux:
@RestController
public class UserController {
@GetMapping("/users")
public Flux<User> getAllUsers() {
return userRepository.findAll(); // Возвращает реактивный поток
}
}
Когда выбирать:
- Web: Классические CRUD-приложения, интеграция с блокирующими библиотеками (JPA, JDBC).
- WebFlux: Высокий параллелизм, потоковые API, интеграция с неблокирующими клиентами.