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

测试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…

关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Spring Webflux 使用R2DBC 连接MySql 初探]http://www.zyiz.net/tech/detail-144512.html
本文介绍了如何使用Spring WebFlux和R2DBC进行响应式数据库交互,特别是针对MySQL数据库。通过引入相关依赖,配置数据库连接,创建数据模型、Repository、Service和Controller,实现了对MySQL数据库的异步非阻塞操作。示例展示了查询数据并返回Flux响应的过程。
1904

被折叠的 条评论
为什么被折叠?



