webflux支持mysql数据库_Spring Webflux 使用R2DBC 连接MySql 初探

本文介绍了如何使用Spring WebFlux和R2DBC进行响应式数据库交互,特别是针对MySQL数据库。通过引入相关依赖,配置数据库连接,创建数据模型、Repository、Service和Controller,实现了对MySQL数据库的异步非阻塞操作。示例展示了查询数据并返回Flux响应的过程。

响应式编程指的是数据驱动的、异步和并发的编程范式。简而言之,异步数据流编程。对于数据流进行创建、组合、过滤、转换等操作,最终得到所需要的处理和结果。具有高性能,事件驱动,充分利用计算资源,更加优雅的异步编程体验,同时它也提供了背压机制来防止系统过载。典型的框架有 RxJava、Reactor 等。

在很长一段时间 Java 的响应式只能同 MongoDB、Redis 等这些非关系型数据库进行交互。而目前我们大部分的数据还是存放在关系型数据库中,大部分情况下 Java 使用 JDBC 来操作关系型数据库,而 JDBC 是阻塞的、同步的。所以迫切需要一种支持响应式的数据库驱动协议。目前市面上有两种响应式数据库驱动协议 ADBA 和 R2DBC

R2BDC诞生是由于 Spring 官方在 Spring 5 发布了响应式 Web 框架 Spring WebFlux 之后急需能够满足异步响应的数据库交互 API 。 由于缺乏标准和驱动,Pivotal(Spring 官方) 团队开始研究反应式关系型数据库连接(Reactive Relational Database Connectivity),并提出了 R2DBC 规范 API 以评估可行性并讨论数据库厂商是否有兴趣支持反应式的异步非阻塞驱动程序。最开始只有 PostgreSQL 、H2、MSSQL 三家,现在 MySQL 也加入了进来。R2DBC 最新版本是0.8.1.RELEASE。除了驱动实现外还提供了 R2DBC 连接池 和 R2DBC 代理。除此之外还支持云原生应用。

Spring Boot 2.3.0.RELEASE之后,才正式支持基于 r2dbc 的 MySQL 驱动

创建一个Spring WebFlux使用R2DBC去操作MySQL也非常简单,前提是对WebFlux有初步的了解

导入相应依赖

org.springframework.boot

spring-boot-starter-data-r2dbc

org.springframework.boot

spring-boot-starter-webflux

dev.miku

r2dbc-mysql

复制代码

配置文件配置连接地址

spring:

r2dbc:

password: admin

url: r2dbcs:mysql://localhost:3306/test_db

username: root

复制代码

编码 -建立数据库关系映射do

@Data

@Table("mall_ad")

public class AdBean {

@Id

private Integer id;

private String name;

private String link;

private String url;

private String content;

private LocalDateTime startTime;

private LocalDateTime endTime;

private Byte deleted;

}

复制代码

编码-建立vo

@Data

@Builder

public class AdVo {

private String name;

private String link;

private String url;

private String content;

}

复制代码

编码-建立数据库操作对象

public interface AdRepository extends ReactiveCrudRepository {

}

复制代码

编码-建立service

@Service

public class AdServiceImpl implements AdService {

@Autowired

private AdRepository adRepository;

/**

* 查询现在的的广告

*

* @return

*/

@Override

public Flux findAll() {

//这里对于stream操作需要有一定的了解

return adRepository.findAll().map(

adBean -> AdVo.builder()

.name(adBean.getName()).link(adBean.getLink())

.url(adBean.getUrl()).content(adBean.getContent())

.build()

);

}

}

复制代码

编码-建立controller

@RestController

@RequestMapping("/api/ad")

public class AdController {

@Autowired

private AdService adService;

@GetMapping("/findAll")

public Flux findNowAd() {

return adService.findAll();

}

}

复制代码

启动项目

4af7f22ebe1320a113398fa67f70779e.png

测试api

// 20200720213921

// http://127.0.0.1:8080/api/ad/findAll/

[

{

"name": "合作 谁是你的菜",

"link": "",

"url": "http://yanxuan.nosdn.127.net/65091eebc48899298171c2eb6696fe27.jpg",

"content": "合作 谁是你的菜"

},

{

"name": "活动 美食节",

"link": "",

"url": "http://yanxuan.nosdn.127.net/bff2e49136fcef1fd829f5036e07f116.jpg",

"content": "活动 美食节"

},

{

"name": "活动 母亲节",

"link": "",

"url": "http://yanxuan.nosdn.127.net/8e50c65fda145e6dd1bf4fb7ee0fcecc.jpg",

"content": "活动 母亲节5"

}

]

复制代码

完整项目地址 gitee.com/yichengxian…

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Spring Webflux 使用R2DBC 连接MySql 初探]http://www.zyiz.net/tech/detail-144512.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值