Spring 5 响应式开发示例

前言

Spring 5 已经大力支持了响应式开发模式,引入的响应式框架叫做 Spring WebFlux

关于 Spring 5 响应式开发的介绍,可以看之前的文章“Spring 5 响应式开发”。

本文不讲理论,直接创建一个响应式的 Restful API 示例,基于 Spring Boot 2.0、MongoDB,目的在于快速了解响应式代码是如何编写的。

如果想实际动手实践一下,文章末尾提供了源码下载地址。

示例代码

(1)创建项目

最简单的方式是到spring网站去初始化一个项目,网址 http://start.spring.io

Group : com.example

Article : webflux-demo

Dependencies : Reactive Web 和 Reactive MongoDB

填好后点击生成项目的按钮就可以下载下来了。

(2)连接数据库

MongoDB 的安装步骤就不细说了,我使用的是 Docker 容器,很方便。

application.properties 中添加数据库连接信息:

spring.data.mongodb.uri=mongodb://localhost:27017/webflux_demo

(3)创建 Model

(4)创建 DAO

和以前使用JPA时一样,只是继承了reactive形式的父类。

里面什么都不用写,自动获得 CRUD 等基本能力。

(5)创建 Controller

下面的代码比较多,但实际就是 CRUD 的基本操作,重点看写法。

可以看到,与我们平时写的代码几乎一样,只是返回类型不一样了,比如 getAllBlogs() 获取全部blog列表,平时写法中返回值应该是 List<Blog>,而这里变成了 Flux<Blog>,Flux 相当于 N 个 Blog 的容器。

代码就都完成了,下面运行起来看看效果。

运行测试

启动项目

mvn spring-boot:run

使用 postman 访问 api

创建

查询所有

查询单条

修改

删除

查询所有,验证删除效果

小结

Spring 5 的 webflux 框架真的很牛,底层完全实现了响应式模型,使我们项目的性能得到较大提升,并且在开发方式上尽可能的与原有方式保持一致。

通过上面这个小DEMO,我们可以对响应式编码方式有一个大概的了解,可以看到,非常简单,但不要以为实际开发也很简单,Flux 有大量的方法需要我们去学习,而且 Spring 5 是基于 Java8 的,在开发中会大量用到 Lambda表达式、streams 操作,如果Java8还不熟,需要赶紧上车了。

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2018-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

Spring集成RabbitMQ-使用RabbitMQ更方便

如果提到Spring,你脑海中对他的印象还停留在SSH三大框架之一,那或许你该好好重新认识这个家伙。 在IT技术日新月异的今天,他还能让你忘不了并与他朝夕相处,...

21490
来自专栏Java后端生活

JavaWeb(七)JSP-2

17760
来自专栏乐百川的学习频道

Spring学习笔记 Spring Roo 简介

一直以来,Java/Spring开发被认为是笨重的代表,无法快速生成项目原型和骨架。所以,Spring推出了Spring Roo这个项目,帮助我们快速生成项目原...

31470
来自专栏木木玲

Netty in action ——— 异步和事件驱动

22980
来自专栏battcn

一起来学SpringBoot | 第二篇:SpringBoot配置详解

上一篇介绍了 SpringBoot 由来及构建方式,通过第一章的教程我们对 SpringBoot 不在感到陌生,可以发现 SpringBoot 虽然干掉了 XM...

13710
来自专栏数据之美

python 日志模块 logging 详解

Java 中最通用的日志模块莫过于 Log4j 了,在 python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。 Python ...

56170
来自专栏hbbliyong

Spring Boot 设置静态资源访问

问题描述 当使用spring Boot来架设服务系统时,有时候也需要用到前端页面,当然就不可或缺地需要访问其他一些静态资源,比如图片、css、js等文件。那么如...

335100
来自专栏SpringBoot 核心技术

第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费

433150
来自专栏大魏分享(微信公众号:david-share)

重点来了:事务一致性的深入研究&EJB的全生命周期 | 从开发角度看应用架构5

14840
来自专栏Linyb极客之路

使用Spring Boot实现模块化

55820

扫码关注云+社区

领取腾讯云代金券