- 基础
构建Web项目的开发者都知道Spring MVC,Spring MVC的构建基于Servlet API,使用同步阻塞式,也就是说每一个请求对应一个线程去处理。
Spring WebFlux是一个异步非阻塞式的Web框架,基于Spring5和Java8及以上版本、lambada表达式、和函数编程开发的框架。
WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。
如图所示,WebFlux如果使用tomcat容器,是需要Servlet3.0以上的,并且不支持数据库连接。
- 如何使用WebFlux
WebFlux使用Spring Boot启动,它的关键依赖如下:
pom.xml中依赖如下配置,WebFlux将以tomcat为容器启动
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.3.RELEASE</version> </dependency>
pom.xml中依赖如下配置,WebFlux将基于Netty启动容器
<!--<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.3.RELEASE</version> </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> <version>2.0.0.RELEASE</version> </dependency>
怎样才算是WebFlux的独有特征了?
@GetMapping("common") public Mono<String> common(){ return Mono.just("My first mono"); }
如代码所示,可以看到很眼生的对象Mono,Mono就是WebFlux的独有特征。
在WebFlux中,Mono是非阻塞的写法,只有这样,才能发挥WebFlux 非阻塞 + 异步的特性。