springboot webflux r2dbc入门案例

简介: springboot webflux r2dbc入门案例

为什么用webwebflux r2dbc
在并发场景,和大数据量场景 有着更好的性能

并发小,数据量小的时候,不一定能提高性能。

我们知道传统的Web框架,比如说:struts2,springmvc等都是基于Servlet API与Servlet容器基础之上运行的,在Servlet3.1之后才有了异步非阻塞的支持。而WebFlux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上,因此它的运行环境的可选择行要比传统web框架多的多。

WebFlux提供了一种比其更完美的解决方案。使用非阻塞的方式可以利用较小的线程或硬件资源来处理并发进而提高其可伸缩性。


Spring Data R2DBC项目是Spring Data家族的一部分,可轻松实现基于R2DBC的存储库。R2DBC(Reactive Relational Database Connectivity)是一个使用反应式驱动集成关系数据库的孵化器。Spring Data R2DBC运用熟悉的Spring抽象和repository 支持R2DBC。基于此,在响应式程序栈上使用关系数据访问技术,构建由Spring驱动的程序将变得非常简单。

   Spring Data R2DBC旨在从概念上简化。为了实现此目的,它不提供ORM框架的缓存,延迟加载,后写或其他许多功能。这代表Spring Data R2DBC是一个简单,有限,针对特定情况的object mapper。

   Spring Data R2DBC提供了一种实用的方法来与您的数据库进行交互,并提供 DatabaseClient 作为应用程序的入口点。提供以下驱动支持。


接下来代码奉上

数据库字段如下



sql如下

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL,
  `age` int NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'zhangsan', 22);
SET FOREIGN_KEY_CHECKS = 1;

User.java

package com.example.demo;
import lombok.Data;
@Data
public class User {
    private int id;
    private int age;
    private String name;
}


package com.example.demo;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import reactor.core.publisher.Mono;
import java.util.List;
public interface UserRepository extends ReactiveCrudRepository<User, Integer> {
    public Mono<User> getUserByName(String name);
}


build.gradle


plugins {
  id 'org.springframework.boot' version '2.6.0-SNAPSHOT'
  id 'io.spring.dependency-management' version '1.0.11.RELEASE'
  id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
  maven { url 'https://maven.aliyun.com/repository/public' }
  mavenCentral()
  maven { url 'https://repo.spring.io/milestone' }
  maven { url 'https://repo.spring.io/snapshot' }
}
dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
  implementation 'org.springframework.boot:spring-boot-starter-webflux'
  runtimeOnly 'org.mariadb:r2dbc-mariadb'
  runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
  testImplementation 'io.projectreactor:reactor-test'
  compileOnly 'org.projectlombok:lombok'
  annotationProcessor 'org.projectlombok:lombok'
}
test {
  useJUnitPlatform()
}

application.yml

spring:
  profiles:
    active: local
  application:
    name: demo
  r2dbc:
    url: r2dbcs:mariadb://127.0.0.1:3306/test1
    #url: r2dbcs:mysql://127.0.0.1:3306/test1
    driver-class-name: org.mariadb.jdbc.Driver
    username: root
    password: 123456
server:
  port: 8089
  http2:
    enabled: true

浏览器打开


http://localhost:8089/test
目录
相关文章
|
1月前
|
前端开发 Java 数据库
SpringBoot入门 - 对Hello world进行MVC分层
SpringBoot入门 - 对Hello world进行MVC分层
46 3
SpringBoot入门 - 对Hello world进行MVC分层
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
48 3
SpringBoot入门 - 添加内存数据库H2
|
1月前
|
Java 应用服务中间件 数据库连接
SpringBoot入门(2) - SpringBoot HelloWorld
SpringBoot入门(2) - SpringBoot HelloWorld
40 2
SpringBoot入门(2) - SpringBoot HelloWorld
|
1月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
85 5
|
1月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
34 4
|
25天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
46 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
Java 应用服务中间件 数据库连接
SpringBoot入门 - SpringBoot HelloWorld
SpringBoot入门 - SpringBoot HelloWorld
SpringBoot入门 - SpringBoot HelloWorld
|
1月前
|
Java Spring
SpringBoot入门 - 定制自己的Banner
SpringBoot入门 - 定制自己的Banner
26 2
SpringBoot入门 - 定制自己的Banner
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
49 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
17 1
 SpringBoot入门(3) - 对Hello world进行MVC分层