发布时间:2019-08-02 10:00:50
作者:知乎用户链接:https://www.zhihu./question/283043084/answer/430735696来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
大概意思就是比jpa快,HikariCP也是性能数一数二的连接池. 作为新事物,一般都喜欢搭配新框架. 响应式web最大的优势就是性能. 所以在选择框架上也偏向小而美高性能的lib.
至于spring webmvc和webflux(响应式)的区别,spring文档中有说明: https://docs.spring.io/spring/docs/5.0.7.RELEASE/spring-framework-reference/web-reactive.html#webflux-framework-choice
这里有一个更好的视频: Servlet vs Reactive Stacks in Five Use Cases 推荐这个视频.
传统的servlet mvc请求是一个线程一个请求,所以在高并发情况下对服务器压力比较大. 而webflux采用了类似nodejs的event loop模型. http请求的处理流程的任意一步都是不能block的. 在传统的servlet mvc模型中,很多方法都是阻塞的,例如IO(数据库读写,文件读写,网络读写). 在reactive中就不允许了. 所以spring-data项目有提供不同于CrudRepository的抽象-ReactiveRepository,因为JDBC是阻塞的,如图所示:
<img src="https://pic1.zhimg./v2-9b9ac4348acecd96507252c8bc02f0a8_b.jpg" data-caption="" data-size="normal" data-rawwidth="670" data-rawheight="496" data-default-watermark-src="https://pic1.zhimg./v2-9b9ac4348acecd96507252c8bc02f0a8_b.jpg" class="origin_image zh-lightbox-thumb" width="670" data-original="https://pic1.zhimg./v2-9b9ac4348acecd96507252c8bc02f0a8_r.jpg">
注意, 我们的dao方法返回的不是Car,而是Flux<Car>,Flux/Mono 你可以认为是nodejs的Promise. 在webflux中,当你调用io方法时,你不是真的在读写io,你只是声明.(想想SQL).
总之, 如果你不清楚reactive开发的优势和原理, 那么你就不需要它,也别用它. jdbc还没支持非阻塞api呢