news 2026/4/18 8:44:11

Spring Boot 响应式 WebFlux 从入门到精通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 响应式 WebFlux 从入门到精通

响应式编程基础

响应式编程是一种基于数据流和变化传播的编程范式。Spring WebFlux 是 Spring 框架提供的响应式 Web 栈,基于 Reactor 库实现。核心概念包括 Publisher(发布者)、Subscriber(订阅者)和背压(Backpressure)机制。

Reactor 提供两种核心类型:Mono(0-1 个元素)和 Flux(0-N 个元素)。创建示例:

Mono.just("Hello") Flux.fromIterable(Arrays.asList(1, 2, 3))

项目初始化

使用 Spring Initializr 创建项目时需选择 Reactive Web 依赖。Maven 配置示例:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>

基础启动类需启用响应式支持:

@SpringBootApplication public class WebfluxApplication { public static void main(String[] args) { SpringApplication.run(WebfluxApplication.class, args); } }

路由与处理器

WebFlux 提供函数式路由声明方式。典型路由配置:

@Bean public RouterFunction<ServerResponse> routes() { return RouterFunctions.route() .GET("/hello", request -> ServerResponse.ok().body(Mono.just("Hello WebFlux"), String.class)) .build(); }

注解式控制器示例:

@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public Mono<User> getUser(@PathVariable String id) { return userRepository.findById(id); } }

响应式数据库集成

Spring Data 提供响应式 Repository 支持。配置 MongoDB 示例:

spring: data: mongodb: uri: mongodb://localhost:27017/test

响应式 Repository 接口:

public interface UserRepository extends ReactiveMongoRepository<User, String> { Flux<User> findByAgeGreaterThan(int age); }

错误处理机制

全局异常处理示例:

@ExceptionHandler public Mono<ResponseEntity<String>> handle(Exception ex) { return Mono.just(ResponseEntity .status(HttpStatus.INTERNAL_SERVER_ERROR) .body(ex.getMessage())); }

响应式错误处理操作符:

return userService.getUser(id) .onErrorResume(e -> Mono.just(new User("fallback")));

测试策略

WebTestClient 是测试 WebFlux 的主要工具:

@SpringBootTest class UserControllerTest { @Autowired private WebTestClient webClient; @Test void testGetUser() { webClient.get().uri("/users/1") .exchange() .expectStatus().isOk(); } }

高级特性

服务器推送事件(SSE)实现:

@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<String> streamEvents() { return Flux.interval(Duration.ofSeconds(1)) .map(i -> "Event " + i); }

响应式 WebSocket 支持:

@Bean public HandlerMapping webSocketHandlerMapping() { Map<String, WebSocketHandler> map = new HashMap<>(); map.put("/echo", new EchoHandler()); return new SimpleUrlHandlerMapping(map, -1); }

性能优化

关键配置参数:

server: reactor: netty: max-in-memory-size: 10MB connection-timeout: 30s

背压策略建议:

  • 使用onBackpressureBuffer缓冲溢出
  • 采用limitRate限制请求速率
  • 实现自定义BaseSubscriber控制消费速度
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 14:21:47

每次改老代码都提心吊胆?4种遗留代码的对症药方和必备工具

许多人认为遗留代码只是“老旧的代码”&#xff0c;但实际上&#xff0c;遗留代码管理关乎整个技术体系的健康度与团队的长期效率。忽视遗留代码会导致以下几个核心问题&#xff1a;• 技术债务持续累积&#xff1a;每次因赶工期而写的临时代码&#xff0c;都会在未来产生利息 …

作者头像 李华
网站建设 2026/4/13 13:07:50

政策驱动工业智能化进程加速,东土科技以“根技术”筑基产业未来

1月7日&#xff0c;《工业互联网和人工智能融合赋能行动方案》发布&#xff0c;标志着工业智能化从战略规划进入规模化落地新阶段。该方案明确提出&#xff0c;到2028年将推动不少于5万家企业实施新型工业网络改造&#xff0c;并通过基础底座升级等行动&#xff0c;协同推进工业…

作者头像 李华
网站建设 2026/4/17 22:02:12

Svelte应用中的CSP策略实践

引言 在现代Web开发中,安全性是至关重要的。Content Security Policy (CSP) 是一个额外的安全层,用于检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入攻击。在本文中,我们将探讨如何在Svelte应用中实现和管理CSP策略,解决常见的违规问题,并通过一个具体的实…

作者头像 李华
网站建设 2026/4/15 8:51:25

S32DS烧录加密固件的操作指南与注意事项

S32DS烧录加密固件&#xff1a;从原理到实战的完整指南在汽车电子和工业控制领域&#xff0c;一个看似简单的“下载程序”动作背后&#xff0c;可能藏着整套安全防线的设计考量。当你在S32 Design Studio&#xff08;S32DS&#xff09;中点击“Program Flash”&#xff0c;你真…

作者头像 李华
网站建设 2026/3/20 9:21:45

arm64-v8a平台上的功耗管理策略完整示例

arm64-v8a平台上的功耗管理&#xff1a;从理论到实战的完整指南你有没有遇到过这样的情况&#xff1f;设备明明没有运行大型应用&#xff0c;电池却在快速掉电&#xff1b;或者系统响应突然变慢&#xff0c;温度传感器报警——这些往往不是硬件缺陷&#xff0c;而是功耗管理系统…

作者头像 李华