基于RuoYi-Flowable-Plus快速构建企业BPM流程平台
技术选型与核心能力
企业级流程引擎的选型往往面临功能完整性与部署复杂度之间的权衡。RuoYi-Flowable-Plus作为若依生态的垂直扩展方案,将Flowable 6.7.2引擎深度集成至Spring Boot体系,形成前后端分离的现代化架构。
该方案的技术组合呈现以下特征:
- 服务层采用Spring Boot 2.7配合MyBatis Plus实现数据持久化
- 表现层基于Vue 2.x与Element UI构建交互界面
- 流程引擎严格遵循BPMN 2.0规范
- 身份认证层引入Sa-Token替代传统Spring Security方案
- 数据存储兼容MySQL、PostgreSQL、Oracle及SQL Server
环境准备与工程初始化
部署前需确认运行环境满足最低配置要求:JDK 1.8+、Maven 3.6+、Node.js 14+、Redis 5.0+以及MySQL 5.7+。
获取源码后执行初始化命令:
git clone https://gitcode.com/gh_mirrors/ru/RuoYi-Flowable-Plus
cd RuoYi-Flowable-Plus
数据库初始化需执行两个阶段的脚本:
CREATE DATABASE ruoyi_flowable
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
USE ruoyi_flowable;
SOURCE script/sql/mysql/mysql_ry_v0.8.X.sql;
SOURCE script/sql/mysql/flowable_6.7.2_mysql.sql;
调整数据源配置位于ruoyi-admin/src/main/resources/application-druid.yml:
spring:
datasource:
druid:
master:
url: jdbc:mysql://localhost:3306/ruoyi_flowable?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: ${DB_PASSWORD}
服务启动与访问验证
后端服务编译与启动流程:
mvn clean install -DskipTests
cd ruoyi-admin
mvn spring-boot:run
前端工程依赖安装与热重载:
cd ruoyi-ui
npm install --registry=https://registry.npmmirror.com
npm run dev
服务就绪后访问http://localhost:80,默认凭证为admin/admin123。
可视化流程设计机制
平台的核心竞争力体现在零代码的流程建模能力。设计器支持BPMN 2.0标准元素的全量操作,包括:
| 元素类型 | 应用场景 | 配置要点 |
|---|---|---|
| 用户任务 | 人工审批节点 | 分配策略、候选人、候选组 |
| 排他网关 | 条件分支路由 | 表达式语法、默认路径 |
| 并行网关 | 多任务并行处理 | 汇聚条件、同步机制 |
| 服务任务 | 自动业务逻辑 | 委托类、表达式调用 |
| 边界事件 | 超时或异常处理 | 定时器定义、信号触发 |
流程模型与表单的双向绑定通过元数据驱动实现,表单控件库覆盖文本、数值、日期、枚举、附件等常用类型,支持栅格布局与选项卡容器。
典型场景实施:费用报销流程
以跨部门费用审批为例,演示完整实施路径。
阶段一:模型构建
进入"流程管理→模型设计"创建新模型,命名"费用报销审批流"。画布中依次放置:
- 启动事件(申请人提交)
- 用户任务(直属主管审核,分配规则:${directManager})
- 排他网关(金额判断:${amount > 5000})
- 分支一:金额≤5000→财务审核→结束
- 分支二:金额>5000→部门总监审批→财务审核→结束
阶段二:表单建模
在"表单管理"模块创建报销申请表,字段结构如下:
{
"fields": [
{"type": "text", "name": "applicant", "label": "申请人", "readonly": true},
{"type": "number", "name": "amount", "label": "报销金额", "rules": [{"required": true}]},
{"type": "select", "name": "category", "label": "费用类别", "options": ["差旅","办公","业务招待"]},
{"type": "date", "name": "expenseDate", "label": "发生日期"},
{"type": "upload", "name": "invoices", "label": "发票附件", "multiple": true}
]
}
阶段三:部署与运行
模型保存后执行部署操作,生成流程定义版本。终端用户通过"流程中心→发起流程"入口填报表单,流程实例自动流转至对应审批人任务列表。
扩展开发接口
针对复杂业务场景,平台预留多层扩展点:
流程监听器:在com.ruoyi.flowable.listener包下实现ExecutionListener或TaskListener接口,用于任务创建通知、完成回调、流程结束归档等场景。
自定义服务任务:通过实现JavaDelegate接口封装业务逻辑,在流程定义中通过类全名或Spring Bean名称引用。
REST API封装:引擎原生API经统一封装后暴露为标准化端点,支持外部系统集成:
// 获取待办任务列表
GET /workflow/task/todo?pageNum=1&pageSize=10
// 完成任务并传递变量
POST /workflow/task/complete
{
"taskId": "task-001",
"variables": {"approved": true, "comment": "同意"}
}
// 流程实例状态查询
GET /workflow/instance/{instanceId}/status
性能调优策略
高并发场景下的关键优化措施:
数据层优化
-- 运行时任务表索引优化
CREATE INDEX idx_ru_task_inst ON act_ru_task(proc_inst_id_);
CREATE INDEX idx_ru_task_assignee ON act_ru_task(assignee_, create_time_);
-- 历史数据分区归档(MySQL 8.0)
CREATE TABLE act_hi_taskinst_archive
PARTITION BY RANGE (YEAR(end_time_)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025)
);
应用层优化
- 启用Flowable的异步执行器,将定时任务与历史数据生成异步化
- 配置二级缓存,缓存热点流程定义与用户组信息
- 调整Druid连接池参数:initialSize=5, maxActive=50, maxWait=60000
- JVM堆内存建议分配4G以上,G1垃圾收集器
故障排查速查
| 现象 | 根因定位 | 修复方案 |
|---|---|---|
| 流程部署后无实例创建 | 流程定义未激活 | 检查act_re_procdef表的SUSPENSION_STATE字段 |
| 任务分配异常 | 表达式解析失败 | 验证变量作用域与SpEL语法 |
| 设计器组件拖拽失效 | 前端资源加载异常 | 清除npm缓存,重新构建node_modules |
| 历史数据查询缓慢 | 缺少时间范围过滤 | 强制添加end_time_或start_time_查询条件 |
容器化部署参考
项目根目录提供Docker Compose编排文件,一键启动完整环境:
cd script/docker
docker-compose -f docker-compose.yml up -d
# 服务组件说明
# ruoyi-mysql: 数据库服务
# ruoyi-redis: 缓存服务
# ruoyi-server: 后端应用
# ruoyi-nginx: 前端静态资源代理
生产环境建议采用Kubernetes编排,配置HPA水平自动扩缩容,配合Prometheus监控Flowable引擎核心指标(流程实例吞吐量、任务平均处理时长、异步作业队列深度等)。