Reactive Spring实战 -- 响应式MySql交互

本文介绍了如何在Spring中利用R2DBC进行响应式Mysql交互,强调了响应式编程的概念及其与传统JDBC的区别。通过实例展示了Spring Data R2DBC的使用,包括依赖配置、Repository接口、自定义SQL操作和事务处理,并对比了与Spring Data JPA的相似之处。
摘要由CSDN通过智能技术生成

本文与大家探讨Spring中如何实现MySql响应式交互。

Spring Data R2DBC项目是Spring提供的数据库响应式编程框架。
R2DBC是Reactive Relational Database Connectivity的首字母缩写词。R2DBC是一个API规范倡议,它声明了一个响应式API,由驱动程序供应商实现,并以响应式编程的方式访问他们的关系数据库。
实现数据库的响应式编程并不是容易的,传统的JDBC协议是一个完全阻塞的 API,所以响应式编程对JDBC协议可以说是一种“颠覆”了。

这里再强调一次响应式编程,响应式编程是一种非阻塞异步的编程模式,而Spring响应式编程提供了一种友好、直观、易于理解的编码模式处理异步结果(可参考前面的文章)。
也就是说,应用发送SQL给数据库后,应用线程不需要阻塞等待数据库返回结果,而是直接返回处理其他任务,等到数据库SQL处理完成后,再由Spring调用线程处理结果。

到目前,Spring Data R2DBC项目支持以下数据库:
H2 (io.r2dbc:r2dbc-h2)
MariaDB (org.mariadb:r2dbc-mariadb)
Microsoft SQL Server (io.r2dbc:r2dbc-mssql)
MySQL (dev.miku:r2dbc-mysql)
jasync-sql MySQL (com.github.jasync-sql:jasync-r2dbc-mysql)
Postgres (io.r2dbc:r2dbc-postgresql)
Oracle (com.oracle.database.r2dbc:oracle-r2dbc)

下面基于MySql,介绍一下Spring Data R2DBC使用方式。

引入依赖

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

    <dependency>
      <groupId>dev.miku</groupId>
      <artifactId>r2dbc-mysql</artifactId>
      <version>0.8.2.RELEASE</version>
    </dependency>

配置文件

spring.r2dbc.url=r2dbcs:mysql://127.0.0.1:3306/bin-springreactive?useSSL=false
spring.r2dbc.username=...
spring.r2dbc.password=...

Spring Data R2DBC可以与

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@RequestMapping("/testjson") @ResponseBody public Map<String,Object> testjson(String data) throws JSONException { Map<String,Object> map = new HashMap<>(); // String objectStr="{\\\\"username\":\"老李\",\"nickname\":\"李刚\",\"remark\":\"肚痛\"}"; // String basestr = Base64.getBase64(objectStr); String javabean = Base64.getFromBase64(data);//解密 // System.out.println(javabean+"解密后"); JSONObject JSON = JSONObject.parseObject(javabean);//转json String j = JSON.get("data").toString();//根据key获取value // System.out.println(j+"解密后"); JSONObject JSONs = JSONObject.parseObject(j);//value转json SysUser sysUser = JSONs.toJavaObject(SysUser.class);//json转实体类 System.out.println(sysUser.getUsername()+"名字"); return map; } 测试类 package com.example.hello; import com.alibaba.fastjson.JSONObject; import com.example.hello.util.Base64; import com.example.hello.util.HttpClientUtil; import org.junit.Test; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; public class HelloApplicationTests { public static final String baseUrl = "http://localhost:8080/"; @Test public void contextLoads() throws UnsupportedEncodingException { String requestUrl = baseUrl + "testjson"; Map<String, Object> argsMap = new HashMap<String, Object>(); argsMap.put("data", "{'username':'老李','nickname':'李刚','remark':'肚痛'}"); String argsStr = JSONObject.toJSONString(argsMap); System.out.println("加密前"+argsStr); String base = Base64.getBase64(argsStr); argsStr = URLEncoder.encode(base,"utf8"); HttpClientUtil.httpRequest(requestUrl + "?data=" + argsStr, ""); System.out.println("10000000000"); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值