SpringBoot2.0使用Spring WebFlux之HelloWord篇

  • Reactive Programming和Reactive Streams 以及 Spring Webflux 介绍
  • SpringBoot2.0使用Spring WebFlux HelloWord
  • 使用指定服务器访问 WebFlux程序
    • 引入 spring-boot-starter-web使用的是tomcat
    • 指定使用tomcat
    • 指定使用jetty

Reactive Programming和Reactive Streams 以及 Spring Webflux 介绍

关于Reactive Programming和Reactive Streams自己搜索大量文章都介绍的朦朦胧胧的,不过在我的努力下终于找到了2个博主的博客介绍的非常好。正如孔子所说:述而不作,我这里就不在进行自己的理解的介绍了。直接引用好的介绍来说明。说了这么多我现在隆重介绍一下2个博主他们分别是:

  • csdn 博主 享学IT
  • 博主 泥瓦匠BYSocket

csdn 博主 享学IT 关于Reactive Programming和Reactive Streams介绍如下:

响应式编程通常作为面向对象编程中的“观察者模式”(Observer design pattern)的一种扩展。 响应式流(reactive streams)与“迭代子模式”(Iterator design pattern)也有相通之处, 因为其中也有 Iterable-Iterator 这样的对应关系。主要的区别在于,Iterator 是基于 “拉取”(pull)方式的,而响应式流是基于“推送”(push)方式的。

使用 iterator 是一种“命令式”(imperative)编程范式,因为什么时候获取下一个元素取决于开发者。在响应式流中,相对应的角色是“发布者 - 订阅者”(Publisher-Subscriber),当有新的值到来的时候,反过来由发布者(Publisher) 通知订阅者(Subscriber),这种“推送”模式是响应式的关键。此外,对推送来的数据的操作 是通过一种声明式(declaratively)而不是命令式(imperatively)的方式表达的:开发者通过 描述“处理流程”来定义对数据流的处理逻辑。

摘抄自:博主 享学IT 博客内容 关于Reactive Programming和Reactive Streams详细介绍请查看 该博主的写的非常好的博客进行过了解。文章介绍如下:

  • (2)响应式流——响应式Spring的道法术器
  • (1)什么是响应式编程——响应式Spring的道法术器

泥瓦匠BYSocket 博客中是这样介绍的:

了解 WebFlux ,首先了解下什么是 Reactive Streams。Reactive Streams 是 JVM 中面向流的库标准和规范:

处理可能无限数量的元素
按顺序处理
组件之间异步传递
强制性非阻塞背压(Backpressure)

Backpressure(背压)

背压是一种常用策略,使得发布者拥有无限制的缓冲区存储元素,用于确保发布者发布元素太快时,不会去压制订阅者。

Reactive Streams(响应式流)
一般由以下组成:

  • 发布者:发布元素到订阅者
  • 订阅者:消费元素
  • 订阅:在发布者中,订阅被创建时,将与订阅者共享
  • 处理器:发布者与订阅者之间处理数据

响应式编程

有了 Reactive Streams 这种标准和规范,利用规范可以进行响应式编程。那再了解下什么是 Reactive programming 响应式编程。响应式编程是基于异步和事件驱动的非阻塞程序,只是垂直通过在 JVM 内启动少量线程扩展,而不是水平通过集群扩展。这就是一个编程范例,具体项目中如何体现呢?

响应式项目编程实战中,通过基于 Reactive Streams 规范实现的框架 Reactor 去实战。Reactor 一般提供两种响应式 API :

  1. Mono:实现发布者,并返回 0 或 1 个元素
  2. Flux:实现发布者,并返回 N 个元素

Spring Webflux

Spring Boot Webflux 就是基于 Reactor 实现的。Spring Boot 2.0 包括一个新的 spring-webflux 模块。该模块包含对响应式 HTTP 和 WebSocket 客户端的支持,以及对 REST,HTML 和 WebSocket 交互等程序的支持。一般来说,Spring MVC 用于同步处理,Spring Webflux 用于异步处理。

Spring Boot Webflux 有两种编程模型实现,

  • 类似 Spring MVC 注解方式,
  • 使用其功能性端点方式。

摘抄自:博主 泥瓦匠BYSocket 的博客: Spring Boot 2 快速教程:WebFlux 快速入门(二)
另外推荐一下 泥瓦匠BYSocket 关于SpringBoot的github项目:https://github.com/JeffLi1993/springboot-learning-example

SpringBoot2.0使用Spring WebFlux HelloWord

正所谓光说不练假把式,下面开始实战演示操作。

以下操作是自己参照 csdn 博主 享学IT 博客 (5)Spring WebFlux快速上手——响应式Spring的道法术器 一个练习的介绍。

首先第一步要先引入 webflux 的依赖

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

编写 webflux 访问的controller

@RestController
@RequestMapping("/webflux")
public class HelloWordWebFluxController {@RequestMapping("/helloworld")public Mono<String> helloWord(){return Mono.just("hello WebFlux!"); }
}

最后启动SpringBoot 项目如下图所示 SpringBoot 默认使用的服务器是 Netty

我的SpringBoot的版本是:2.1.0.RELEASE

进行测试:

需要注意的是 如果使用Netty 服务器 那么在application.properties中配置的 server.servlet.context-path 是无效的。

使用指定服务器访问 WebFlux程序

引入 spring-boot-starter-web使用的是tomcat

在pom 中同时引入 spring-boot-starter-web 默认使用的是tomcat 服务器。

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

指定使用tomcat

如果想指定tomcat 服务器则需要在pom.xml中进行配置如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></exclusion><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-reactor-netty</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency>

指定使用jetty

如果想指定jetty 服务器则需要在pom.xml中进行配置如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-reactor-netty</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>

需要注意的是我们是可以在SpringBoot 既可以写SpringMVC 的程序也可以写Spring WebFlux 的程序。

上面 webflux helloworld 示例程序代码地址:

https://github.com/zhuoqianmingyue/springbootexamples/tree/master/spring-boot-2.x-spring-webflux

参考文献:
https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux
https://blog.csdn.net/get_set/article/details/79466402
https://github.com/JeffLi1993/springboot-learning-example
http://hao.jobbole.com/reactive-streams/
https://blog.csdn.net/get_set/article/details/79480233

SpringBoot2.0使用Spring WebFlux之HelloWord篇相关推荐

  1. 在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被废弃,目前找到解决方案就有两种...

    在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被废弃,目前找到解决方案就有两种 1 直接实现WebMvcConfigurer (官方推荐) 例如: ...

  2. SpringBoot2.0整合多数据源拆分

    前言 本文环境承接springboot2.0整合使用mybatis(数据访问篇) 一.什么是多数据源 公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库垂直业务数据库.垂直根据业务划分具体 ...

  3. 这是一篇优雅的Springboot2.0使用手册

    最近再研究springboot的原理?颇有收获,现在让我分享一下springboot如何使用吧~ 想要解锁更多新姿势?请访问我的博客 啥是Springboot 和书上理解的不同,我认为Springbo ...

  4. spring-boot-2.0.3应用篇 - shiro集成

    前言 上一篇:spring-boot-2.0.3源码篇 - 国际化,讲了如何实现国际化,实际上我工作用的模版引擎是freemaker,而不是thymeleaf,不过原理都是相通的. 接着上一篇,这一篇 ...

  5. SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器

    SpringBoot2.1.15(26) WebFlux快速上手--响应式Spring的道法术器 Spring WebFlux Spring WebFlux是随Spring 5推出的响应式Web框架. ...

  6. 【Spring Boot 2.0学习之旅-15】SpringBoot2.0响应式编程

    SpringBoot2.0响应式编程 一.SpringBoot2.0 响应式编程基础知识 Spring WebFlux官方文档 SpringBoot WebFlux文档 1.什么是Spring Web ...

  7. spring-boot-2.0.3启动源码篇二 - run方法(一)之SpringApplicationRunListener

    前言 Springboot启动源码系列还只写了一篇,已经过去一周,又到了每周一更的时间了(是不是很熟悉?),大家有没有很期待了?我会尽量保证启动源码系列每周一更,争取不让大家每周的期望落空.一周之中可 ...

  8. spring-boot-2.0.3不一样系列之源码篇 - springboot源码一,绝对有值得你看的地方

    前言 上篇:spring-boot-2.0.3不一样系列之shiro - 搭建篇,实现了spring-boot与shiro的整合,效果大家也看到了,工程确实集成了shiro的认证与授权功能.如果大家能 ...

  9. spring-boot-2.0.3启动源码篇一 - SpringApplication构造方法

    前言 spring-boot-2.0.3应用篇 - shiro集成,实现了spring-boot与shiro的整合,效果大家也看到了,工程确实集成了shiro的认证与授权功能.如果大家能正确搭建起来, ...

最新文章

  1. [JavaScript] JavaScript 值类型使用:与数组有关的API
  2. django-后台sms管理系统的css框架
  3. R语言ggplot2可视化改变线图(line plot)中线条的色彩实战
  4. ssh: connect to host 192.168.57.131 port 22: Conne
  5. mysql 修改表结构提示 MySQL said: Table is read only
  6. k8s ConfigMap使用示例:以volume或变量形式挂载到pod中
  7. java socket参数详解:OOBInline和UrgentData .
  8. Eclipse中手动清理项目缓存,
  9. Chrome source code map - fail - cannot debug
  10. 深入理解Java main方法
  11. 广工 2013 c语言 试卷,广工2013-5-30、6-25概率论c试卷答案.doc
  12. winform datagridview 自定义tooltip
  13. SpringCloudAlibaba-Nacos 介绍、单机模式下搭建及基本使用
  14. ArcGIS代码进行重分类
  15. springboot官方文档PDF下载指北
  16. vax_patch.exe谁有这个文件,可以免费分享一下嘛?
  17. 微信营销很简单,做好这些你就是大师
  18. Kettle的Web版分享
  19. 高德地图api的自定义地点标注
  20. 三星2022款 The Frame 画壁电视 评测

热门文章

  1. 对中职计算机教学的思考,中职计算机教学思考
  2. 是否需要配置环境变量,比如maven,jdk等
  3. 记录:注意Unity返回的所有数组,只是数组的副本
  4. oracle 后台进程管理,Oracle background processes后台进程
  5. Leecode刷题热题HOT100(13)——罗马数字转整数
  6. OpenShift 4 - OpenShift是如何升级RHCOS的
  7. Python 2.x 即将终止支持,是时候和 Python 2 讲再见了
  8. 注解参数获取不到_scm-springboot基于spring boot的统一注解缓存
  9. each 数据获取attr_Python数据分析 — 基于RFM的精细化用户分层
  10. 怎么把matlab中的图导出,matlab的数据能保存到excel表格-如何将matlab 中输出的图形保存到Excel中去,详细点...