Spring WebFlux para Java: Guia Completo de Programação Reativa
1. O que é e para que serve
Spring WebFlux é um framework web reativo que faz parte do ecossistema Spring Framework 5+, oferecendo uma alternativa ao tradicional Spring MVC. Diferente da abordagem bloqueante (blocking), onde cada requisição HTTP é processada por uma thread separada, o WebFlux é baseado em um modelo de entrada e saída assíncrono e não bloqueante (non-blocking). Isso permite processar milhares de conexões simultâneas com um número mínimo de threads, algo essencial para sistemas de alta carga, microsserviços e aplicações em tempo real.
Para que serve o Spring WebFlux? No mundo atual, onde o número de usuários e dispositivos cresce exponencialmente, os contêineres servlet tradicionais (Tomcat, Jetty) enfrentam o problema "C10K" (processamento de 10.000 conexões simultâneas). Cada thread consome memória (cerca de 1 MB por pilha), e com 10.000 threads, isso resulta em 10 GB de RAM apenas para as pilhas. O WebFlux resolve esse problema usando o modelo de Fluxos Reativos (Reactive Streams), onde uma única thread pode processar várias requisições, alternando entre elas conforme os dados ficam prontos.
O WebFlux suporta dois tipos de servidores: Netty (recomendado, não bloqueante) e Servlet 3.1+ (Tomcat, Jetty, Undertow). Ele se integra totalmente com o Projeto Reactor (Mono e Flux) e pode usar o estilo funcional de roteamento (Router Functions) junto com as anotações @Controller. Isso o torna a escolha ideal para criar APIs de alto desempenho, servidores de eventos (SSE), aplicações WebSocket e microsserviços com bancos de dados reativos (MongoDB Reactive, R2DBC).
2. Instalação
O Spring WebFlux não é instalado via pip ou npm, pois é uma biblioteca para Java. Para usá-lo, você precisa adicionar a dependência ao seu projeto. Abaixo estão os comandos exatos para Maven e Gradle.
Maven (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>3.2.0</version> <!-- Use a versão mais recente -->
</dependency>
Gradle (build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-webflux:3.2.0'
Se você estiver usando o Spring Initializr (start.spring.io), basta selecionar "Spring Reactive Web" na seção de dependências. Para trabalhar com bancos de dados de forma não bloqueante, adicione também:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
3. Início rápido — exemplo mínimo funcional
Crie um controlador REST reativo simples que retorna uma saudação. Este exemplo demonstra a configuração básica do WebFlux usando anotações.
// 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("Olá do Spring WebFlux!");
}
}
Execute a aplicação e acesse http://localhost:8080/hello. Você verá a mensagem "Olá do Spring WebFlux!". Observe que o método retorna Mono<String>, e não apenas