基于 Spring Boot WebFlux 和 Reactor 3 的响应式编程示例项目。
TestReactor 是一个使用 Spring Boot WebFlux 构建的响应式 Web 应用程序示例。该项目演示了如何使用 Reactor 3 进行响应式编程,包括 Flux 和 Mono 的使用、响应式数据处理、分页功能实现等。
项目参考了 使用 Reactor 3 进行响应式编程 系列教程,实现了其中的核心概念和实践方法。
- Spring Boot 3.5.7
- Spring WebFlux - 响应式 Web 框架
- Reactor 3.8.0 - 响应式编程库
- R2DBC - 响应式数据库连接
- PostgreSQL - 关系型数据库
- Flyway - 数据库迁移工具
- Lombok - 简化 Java 代码
- Maven - 项目构建工具
- 用户信息的增删改查操作
- 响应式数据流处理
- 响应式 Repository 实现
- 业务友好的分页(页码从1开始)
- 统一分页参数封装
- 分页结果封装
- 使用 Flyway 管理数据库版本
- 自动执行数据库迁移脚本
- 数据库表结构和注释管理
src/
├── main/
│ ├── java/
│ │ └── com/qinrenjihe/
│ │ ├── TestReactorApplication.java # 应用启动类
│ │ ├── common/ # 通用类
│ │ │ ├── PageResult.java # 分页结果封装
│ │ │ ├── PageableRequest.java # 分页请求参数
│ │ │ └── ResponseResult.java # 响应结果封装
│ │ ├── controller/ # 控制层
│ │ │ └── UserController.java # 用户控制器
│ │ ├── entity/ # 实体类
│ │ │ └── User.java # 用户实体
│ │ ├── repo/ # 数据访问层
│ │ │ ├── ReactiveRepository.java # 响应式仓库接口
│ │ │ ├── UserRepo.java # 用户仓库接口
│ │ │ └── impr/ # 实现类
│ │ │ └── ReactiveUserRepository.java
│ │ ├── service/ # 服务层
│ │ │ └── UserService.java # 用户服务
│ │ └── test/ # Reactor 学习示例
│ │ ├── Part01Flux.java
│ │ ├── Part02Mono.java
│ │ ├── Part03StepVerifier.java
│ │ ├── Part04Transform.java
│ │ ├── Part05Merge.java
│ │ ├── Part06Request.java
│ │ ├── Part07Errors.java
│ │ └── Part09Adapt.java
│ └── resources/
│ ├── db/migration/ # 数据库迁移脚本
│ │ ├── V0.0.1__Init.sql # 初始化脚本
│ │ └── V0.0.2__Add_comments_to_users_table.sql # 添加注释脚本
│ └── application.yml # 应用配置文件
└── test/
├── Part01FluxTest.java
├── Part02MonoTest.java
├── Part03StepVerifierTest.java
├── Part04TransformTest.java
├── Part05MergeTest.java
├── Part06RequestTest.java
├── Part07ErrorsTest.java
└── Part09AdaptTest.java
- Java 21+
- Maven 3.6+
- PostgreSQL 数据库
在 src/main/resources/application.yml 中配置数据库连接信息:
spring:
r2dbc:
url: r2dbc:postgresql://localhost:5432/test
username: postgres
password: postgres# 克隆项目
git clone <项目地址>
# 进入项目目录
cd TestReactor
# 编译项目
mvn clean compile
# 运行项目
mvn spring-boot:run| 接口 | 方法 | 路径 | 描述 |
|---|---|---|---|
| 获取用户 | GET | /users/{id} |
根据 ID 获取用户信息 |
| 获取所有用户 | GET | /users/all |
获取所有用户列表 |
| 获取用户数量 | GET | /users/count |
获取用户总数 |
| 分页获取用户 | GET | /users |
分页获取用户列表 |
分页接口支持以下参数:
page: 页码(从1开始,默认为1)size: 每页大小(默认为10)
示例请求:GET /users?page=1&size=10
| 字段名 | 类型 | 约束 | 描述 |
|---|---|---|---|
| user_id | BIGINT | PRIMARY KEY | 用户唯一标识符 |
| username | VARCHAR(255) | NOT NULL, UNIQUE | 用户登录名 |
| firstname | VARCHAR(255) | NOT NULL | 用户名字 |
| lastname | VARCHAR(255) | NOT NULL | 用户姓氏 |
本项目参考了以下学习资源:
- 使用 Reactor 3 进行响应式编程 - 系列教程
本项目仅供学习和参考使用。