What is Spring WebFlux and reactive programming?
Answer
Spring WebFlux is Spring's reactive web framework introduced in Spring 5, built on Project Reactor and Netty. It supports asynchronous, non-blocking request handling — critical for high concurrency with limited threads. vs Spring MVC: Spring MVC uses blocking I/O (one thread per request); WebFlux uses event-loop model (few threads, non-blocking). WebFlux shines when: making many concurrent external API calls, handling real-time data, WebSocket streams. Core reactive types: Mono<T> — 0 or 1 asynchronous element (like CompletableFuture); Flux<T> — 0 to N asynchronous elements (like a stream). Reactive controller: @RestController @RequestMapping("/api/users") public class UserController { @GetMapping("/{id}") public Mono<User> getUser(@PathVariable Long id) { return userRepository.findById(id); } @GetMapping public Flux<User> getAllUsers() { return userRepository.findAll(); } @PostMapping public Mono<ResponseEntity<User>> createUser(@RequestBody Mono<User> userMono) { return userMono.flatMap(userRepository::save).map(u -> ResponseEntity.status(201).body(u)); } }. Reactive repositories: extend ReactiveCrudRepository or ReactiveMongoRepository (MongoDB natively reactive). Spring Data R2DBC for reactive SQL databases. WebClient (reactive HTTP client): replaces RestTemplate: WebClient.create().get().uri("https://api.example.com/data").retrieve().bodyToMono(Data.class).subscribe(data -> process(data));. When NOT to use WebFlux: CPU-intensive work, blocking libraries (JDBC), simple CRUD — Spring MVC is simpler and performs similarly.
Previous
What is Spring Cloud and its relationship to Spring Boot?
Next
What is Spring Boot Flyway/Liquibase database migration?
More Spring Boot Questions
View all →- Intermediate What is Spring AOP (Aspect-Oriented Programming)?
- Intermediate What is Spring Boot caching with @Cacheable?
- Intermediate What is Spring Data JPA query methods and JPQL?
- Intermediate What is Spring Boot REST API best practices?
- Intermediate What is Spring Boot JWT authentication implementation?