Spring WebFlux para Java: Guía completa de programación reactiva
1. ¿Qué es y por qué usarlo?
Spring WebFlux es un framework web reactivo que forma parte del ecosistema Spring Framework 5+, y ofrece una alternativa al tradicional Spring MVC. A diferencia del enfoque bloqueante (blocking), donde cada solicitud HTTP se procesa en un hilo independiente, WebFlux se basa en un modelo de entrada/salida asíncrono y no bloqueante (non-blocking). Esto permite manejar miles de conexiones simultáneas con una cantidad mínima de hilos, algo fundamental para sistemas de alta carga, microservicios y aplicaciones en tiempo real.
¿Para qué sirve Spring WebFlux? En el mundo actual, donde el número de usuarios y dispositivos crece exponencialmente, los contenedores servlet tradicionales (Tomcat, Jetty) se enfrentan al problema "C10K" (manejar 10 000 conexiones simultáneas). Cada hilo consume memoria (normalmente ~1 MB por pila), y con 10 000 hilos se necesitarían 10 GB de RAM solo para las pilas. WebFlux resuelve esto usando el modelo de flujos reactivos (Reactive Streams), donde un solo hilo puede atender múltiples solicitudes, alternando entre ellas a medida que los datos están disponibles.
WebFlux admite dos tipos de servidores: Netty (recomendado, no bloqueante) y Servlet 3.1+ (Tomcat, Jetty, Undertow). Se integra completamente con el proyecto Reactor (Mono y Flux) y permite usar tanto el estilo funcional de enrutamiento (Router Functions) como las anotaciones @Controller. Esto lo convierte en la opción ideal para crear APIs de alto rendimiento, servidores de eventos (SSE), aplicaciones WebSocket y microservicios con bases de datos reactivas (MongoDB Reactive, R2DBC).
2. Instalación
Spring WebFlux no se instala con pip ni npm, ya que es una biblioteca para Java. Para usarla, debes agregar la dependencia a tu proyecto. A continuación se muestran los comandos exactos para Maven y Gradle.
Maven (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>3.2.0</version> <!-- Usa la versión más reciente -->
</dependency>
Gradle (build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-webflux:3.2.0'
Si usas Spring Initializr (start.spring.io), simplemente selecciona "Spring Reactive Web" en la sección de dependencias. Para trabajar con bases de datos de forma no bloqueante, agrega también:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
3. Inicio rápido — ejemplo mínimo funcional
Crea un controlador REST reactivo simple que devuelva un saludo. Este ejemplo muestra la configuración básica de WebFlux usando anotaciones.
// MainApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
// GreetingController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class GreetingController {
@GetMapping("/hello")
public Mono<String> sayHello() {
return Mono.just("¡Hola desde Spring WebFlux!");
}
}
Ejecuta la aplicación y abre http://localhost:8080/hello. Verás el mensaje "¡Hola desde Spring WebFlux!". Observa que el método devuelve Mono<String>, no un String simple.
También en la biblioteca
Tokens JWT en PHP: Guía completa de autenticación y autorización
Generación de PDF en TypeScript: revisión de bibliotecas y herramientas
Cliente OAuth para C# (.NET): implementación de autorización a través de servicios de terceros
Trabajo con Excel en TypeScript: bibliotecas, herramientas y ejemplos de código
Serialización de objetos en Rust: serde, bincode, JSON y YAML