![461bc40ab61bb91d09c83744200df3a0.gif](https://i-blog.csdnimg.cn/blog_migrate/397a4f8630f740cdab1146cbd1040484.gif)
1. 简介
三月份已经介绍过R2DBC,它是一种异步的、非阻塞的关系式数据库连接规范。
尽管一些NoSQL数据库供应商为其数据库提供了反应式数据库客户端,但对于大多数项目而言,迁移到NoSQL并不是一个理想的选择。这促使了一个通用的响应式关系数据库连接规范的诞生。作为拥有庞大用户群的关系式数据库MySQL也有了反应式驱动,不过并不是官方的。但是Spring官方将其纳入了依赖池,说明该类库的质量并不低。所以今天就尝尝鲜,试一下使用R2DBC连接MySQL。
2. 环境依赖
基于Spring Boot 2.3.1和Spring Data R2DBC,还有反应式 Web 框架Webflux,同时也要依赖r2dbc-mysql库,所有的Maven依赖为:
MySQL版本为 5.7,没有测试其它版本。
3. R2DBC 配置
所有的R2DBC自动配置都在org.springframework.boot.autoconfigure.data.r2dbc
包下,如果要配置MySQL必须针对性的配置对应的连接工厂接口ConnectionFactory
,当然也可以通过application.yml
配置。个人比较喜欢JavaConfig
。
@Bean
详细配置可参考r2dbc-mysql的官方说明:https://github.com/mirromutth/r2dbc-mysql
当ConnectionFactory
配置好后,就会被注入DatabaseClient
对象。该对象是非阻塞的,用于执行数据库反应性客户端调用与反应流背压请求。我们可以通过该接口反应式地操作数据库。
4. 编写反应式接口
我们先创建一张表并写入一些数据:
create
对应的实体为:
package cn.felord.r2dbc.config;
然后我们编写一个Webflux的反应式接口:
package cn.felord.r2dbc.config;
调用接口就能获取到期望的数据结果。
5. 总结
乍一看R2DBC并没有想象中的那么难,但是间接的需要了解Flux
、Mono
等抽象概念。同时目前来说如果不和Webflux框架配合也没有使用场景。就本文的MySQL而言,R2DBC驱动还是社区维护(不得不说PgSQL就做的很好)。
然而需要你看清的是反应式才是未来。如果你要抓住未来就需要现在就了解一些相关的知识。这让我想起五年前刚刚接触Spring Boot的感觉。
另外这里有一份Spring官方关于R2DBC的 PPT,也是让你更好了解R2DBC的权威资料。可以关注:码农小胖哥 回复r2dbc获取。
往期推荐:
Kafka很难吗?10小时搞定!
2020-06-22
![85e99587b86b715f0289441c96bcc5b8.png](https://i-blog.csdnimg.cn/blog_migrate/4045df09c25a383da0c7e075ced2cac2.jpeg)
一对多分页的SQL应该怎么写?
2020-06-22
![d7b5aefec27250236b4b57ef837149ac.png](https://i-blog.csdnimg.cn/blog_migrate/a3af328deca87570301a2d95a41be744.jpeg)
JSON类库Jackson优雅序列化Java枚举类
2020-06-21
![46cc79232fa5fdcee714adf0950949b9.png](https://i-blog.csdnimg.cn/blog_migrate/8f53196f39a817540ed667c0902eb1cf.jpeg)
![d88e062a165a6baf1c87ab33e8f2a4cb.gif](https://i-blog.csdnimg.cn/blog_migrate/51ffebacdb5f048d2481c2224fcd81c7.gif)