R2DBC(1),超强Java进阶路线知识图谱

Reactive Streams 在互操作性方面发挥着重要作用。它对库和基础设施组件很感兴趣,但作为应用程序 API 不太有用,因为它太低级了。应用程序需要一个更高级、更丰富、功能更强大的 API 来组合异步逻辑——类似于 Java 8 Stream API,但不仅限于表。这就是反应式库所扮演的角色。

Project Reactor是 Spring Data R2DBC 的首选反应库。它提供了MonoFluxAPI 类型,通过一组与 ReactiveX 运算符词汇表对齐的丰富运算符来处理0..1( Mono) 和0..N( Flux) 的数据序列。Reactor 是一个 Reactive Streams 库,因此它的所有操作符都支持非阻塞背压。Reactor 非常关注服务器端 Java。它是与 Spring 密切合作开发的。

Spring Data R2DBC 需要 Project Reactor 作为核心依赖项,但它可以通过 Reactive Streams 规范与其他反应式库互操作。作为一般规则,Spring Data R2DBC 存储库接受普通Publisher作为输入,在内部将其调整为 Reactor 类型,使用它,并返回 aMono或 aFlux作为输出。因此,您可以将任何Publisher作为输入并在输出上应用操作,但您需要调整输出以与另一个反应库一起使用。只要可行,Spring Data 就会透明地适应 RxJava 或其他反应式库的使用。

个人理解:通过响应式WebFlux 配合 配合反应式数据源,可以通过非阻塞的方式,提升线程的可用性,提升系统的吞吐量,但是响应时长并没多太多的感知。

2.R2DBC整合Mysql demo


环境:

jdk: adopt-openjdk-11

maven: 3.8.1

SpringBoot : 2.3.2.RELEASE

Pom文件


 <!-- lombok -->

        <dependency>

            <groupId>org.projectlombok</groupId>

            <artifactId>lombok</artifactId>

        </dependency>

        <!-- r2dbc spring data-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-r2dbc</artifactId>

        </dependency>

        <!-- r2dbc mysql 库-->

        <dependency>

            <groupId>dev.miku</groupId>

            <artifactId>r2dbc-mysql</artifactId>

            <version>0.8.2.RELEASE</version>

        </dependency>

        <!-- r2dbc-pool -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-r2dbc</artifactId>

            <version>2.3.0.RELEASE</version>

        </dependency>

        <!-- webFlux -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-webflux</artifactId>

        </dependency> 

application配置文件


### r2dbc

spring:

  r2dbc:

    url: r2dbc:mysql://localhost/r2dbc?useUnicode=true&characterEncoding=UTF-8

    username: root

    password: root

    pool:

      enabled: true

      max-size: 10

      initial-size: 10

      validation-query: select 1 

表结构


DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`  (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `age` int(11) NULL DEFAULT NULL,

  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `phone_number` int(11) NULL DEFAULT NULL,

  PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;



-- ----------------------------

-- Records of user

-- ----------------------------

INSERT INTO `user` VALUES (1, 'admin', 12, '123@163.com', 145448546);

INSERT INTO `user` VALUES (2, 'tom', 18, 'tom@163.com', 12346789);

INSERT INTO `user` VALUES (5, 'jerry', 25, 'jerry@163.com', 154646126);



SET FOREIGN_KEY_CHECKS = 1; 

实体类


/**

 * @author ZhaoJiu

 * @since: 2021/7/22

 * @desc: 用户实体类

 */

@Table("user")

@Data

public  class User {

   @Id

   private String id;

   private String name;

   private Integer age;

   private String email;

   private Integer phoneNumber;



} 

JPA中的Repository


/**

 * @author ZhaoJiu

 * @since: 2021/7/22

 * @desc:

 */

public interface PersonRepository extends R2dbcRepository<User,String> {



} 

最终代码


/**

 * @author ZhaoJiu

 * @since: 2021/7/22

 * @desc: r2dbc 操作mysql CRUD

 */

@RestController

@RequestMapping("user")

public class UserController {



    @Resource

    PersonRepository repository;



    /**

     * 修改用户

     *

     * @param user



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值