创建一个SpringBoot项目
通过来创建项目
- 第一步
- 然后点击Generate Project之后就可以生成项目并且下载下来。
- 解压下载后的项目,然后打开IDEA->File->Open选择项目的pom进行打开。
- 这样子一个最简单的SpringBoot项目就搭建成功了。
通过Maven命令来创建SpringBoot项目
- 配置好Maven的系统路径.
- 然后使用命令
mvn archetype:generate -DinteractiveMode=false -DgroupId=cn.koali -DartifactId=springboot_demo -Dversion=1.0.0-SNAPSHOT复制代码
各个参数的含义参考 3.
创建成功,会提示项目生成的地址。 4. 然后同理使用IDEA打开刚刚命令行生成的项目。 5. 接下来打开 找到Build with Maven复制依赖等等即可。通过IDEA来创建SpringBoot项目.
- 打开IDEA,然后File->new Project. 填写相应的Group,Artifact,然后选择需要的依赖即可以。
使用Spring5.0的web Flux
Web Flux是什么?
- Spring WebFlux是异步,非阻塞的。
- WebFlux有Mono,Flux两种集合类型。
- Mono是0->1集合类型,比如Mono。
- Flux是1->n集合类型,比如Flux<List>
- Mono,Flux都是异步处理的,而集合对象基本上是同步的。
Web Flux(Netty)跟Web MVC(Servlet)有什么区别?
- Web Flux支持Java 8 lamba表达式。
- Web MVC是同步阻塞的IO模型,而Web Flux是异步非阻塞的IO模型。
Web Flux(Netty)跟Web MVC(Servlet)优缺点?
- Web Flux的效率(qps)比Web MVC高。
- Web Flux的编程难度高,维护成本高,对于切面等不好编写。
Web Flux实践
@Configurationpublic class RouterFunctionConfiguration { @Bean public RouterFunctionwebFlux() { return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> { Mono str = Mono.just("Hello World").delayElement(Duration.ofMillis(10)); return ServerResponse.ok().body(str, String.class); }); }}复制代码
与Web MVC类似。我们声明我们的路由类为 @Configuration,然后初始化一个Bean。 在Web Flux请求的接口是RequestServer,响应的接口是ResponseServer。 其中RouterFunction提供了route,通过在route这个方法我们设置RequestPredicates 的路由行为,从而达到接受请求。
验证Web Flux和Web MVC哪个效率高
- 首先写两个API,一个使用Web Flux,一个使用Web MVC,然后阻塞10秒,假装用户思考了10秒。
//web mvc @GetMapping("/webServlet") public String webServlet(){ try { TimeUnit.MILLISECONDS.sleep(10); } catch (InterruptedException e) { return "Error during thread sleep"; } return "Hello World"; }//web flux@Bean public RouterFunctionwebFlux() { return RouterFunctions.route(RequestPredicates.GET("/webFlux"), request -> { Mono str = Mono.just("Hello World").delayElement(Duration.ofMillis(10)); return ServerResponse.ok().body(str, String.class); }); }复制代码
- 然后打开Jmeter 假设有1000个用户,循环10次的发起请求。 JMeter分别填写请求的路径 web Flux耗时10秒左右,而且请求不会被拒绝。 web MVC耗时21秒左右,请求多数被拒绝。