当前位置:首页 > 技术 > 正文内容

基于RuoYi-Flowable-Plus快速构建企业BPM流程平台

访客 技术 2026年7月6日 1

技术选型与核心能力

企业级流程引擎的选型往往面临功能完整性与部署复杂度之间的权衡。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标准元素的全量操作,包括:

元素类型应用场景配置要点
用户任务人工审批节点分配策略、候选人、候选组
排他网关条件分支路由表达式语法、默认路径
并行网关多任务并行处理汇聚条件、同步机制
服务任务自动业务逻辑委托类、表达式调用
边界事件超时或异常处理定时器定义、信号触发

流程模型与表单的双向绑定通过元数据驱动实现,表单控件库覆盖文本、数值、日期、枚举、附件等常用类型,支持栅格布局与选项卡容器。

典型场景实施:费用报销流程

以跨部门费用审批为例,演示完整实施路径。

阶段一:模型构建

进入"流程管理→模型设计"创建新模型,命名"费用报销审批流"。画布中依次放置:

  1. 启动事件(申请人提交)
  2. 用户任务(直属主管审核,分配规则:${directManager})
  3. 排他网关(金额判断:${amount > 5000})
  4. 分支一:金额≤5000→财务审核→结束
  5. 分支二:金额>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包下实现ExecutionListenerTaskListener接口,用于任务创建通知、完成回调、流程结束归档等场景。

自定义服务任务:通过实现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引擎核心指标(流程实例吞吐量、任务平均处理时长、异步作业队列深度等)。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。