添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Spring 5 webflux响应式编程

前言

Spring 5 是流行的 Spring 框架的下一个重大的版本升级。Spring 5 中最重要改动是把反应式编程的思想 应用到了框架的各个方面,Spring 5 的反应式编程以 Reactor 库为基础。

web flux

WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。该模块中包含了对反应式 HTTP、服务器推送事件和 WebSocket 的客户端和服务器端的支持。对于开发人员来说,比较重要的是服务器端的开发,这也是本文的重点。在服务器端,WebFlux 支持两种不同的编程模型:

1. Spring MVC 中使用的基于 Java 注解的方式;

2. 基于 Java 8 的 lambda 表达式的函数式编程模型。

这两种编程模型只是在代码编写方式上存在不同。它们运行在同样的反应式底层架构之上,因此在运行时是相同的。WebFlux 需要底层提供运行时的支持,WebFlux 可以运行在支持 Servlet 3.1 非阻塞 IO API 的 Servlet 容器上,或是其他异步运行时环境,如 Netty 和 Undertow。

注解编程范式

先来看一下注解方式

注解方式只需要在spring web mvc/boot基础上更换依赖,替换controller、repository等模块请求&返回参数类型即可。

具体如下:

一个标准的spring web项目controller层的范例

@RestController
 public class HelloController {
       @GetMapping("/hello")
        public String hello() {
            return "Welcome to reactive world ~";
  }

改成web flux

1.添加maven依赖

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

2.修改参数类型

@RestController
public class HelloController {
        @GetMapping("/hello")
        public Mono<String> hello() {   // 【改】返回类型为Mono<String>