为什么要创建Spring WebFlux ?
一方面是需要一个非阻塞的web 技术栈使用少量的线程和硬件资源来处理并发。另一方面就是函数式编程。
什么是响应式?
响应式是制围绕响应改变而构建的编程模型。例如,响应I/O事件的网络组件、响应鼠标事件的UI控制器等等。
本文我们将学习如何快速构建Spring WebFlux 应用,实现一个简单的Http处理。
由于Spring WebFlux是基于Spring Framework 5.0,以及Spring Boot 2.0 基于Spring FrameWork 5.0, 所以我们使用Spring Boot 2.0+ 来构建项目。
Spring 官方提供了 Spring Initializer 工具,帮助我们快速的生成Spring Boot 项目。
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
创建package 为 com.example.springbootdemo.webflux
创建 HelloHandler
类, 内容如下:
@Component public class HelloHandler { public Mono<ServerResponse> greeting(ServerRequest request) { return ServerResponse.ok().bodyValue("Hello World"); } }
创建HelloRouter
类,路由规则,内容如下:
@Configuration public class HelloRouter { @Bean public RouterFunction<ServerResponse> routes(HelloHandler helloHandler) { return RouterFunctions.route(RequestPredicates.GET("/hello"), helloHandler::greeting); } }
启动主程序,使用Postman工具或者浏览器发起请求:http://localhost:8080/hello
,可以看到返回结果:Hello World
至此使用 Spring WebFlux 构建了一个简单的请求项目。