1. 为什么选择Ruoyi-Flowable作为审批中台基础框架在快速发展的互联网企业中审批流程往往分散在各个业务系统中。OA系统处理日常行政流程财务系统处理报销审批HR系统处理人事变动。这种割裂的状态会导致流程标准不统一、数据孤岛、维护成本高等问题。而Ruoyi-Flowable作为基于Flowable工作流引擎的二次开发框架恰好能解决这些痛点。我去年参与过一个电商平台的审批中台项目最初团队考虑过Activiti、Camunda等方案最终选择了Ruoyi-Flowable。主要原因有三点首先是开箱即用的可视化设计器相比原生Flowable需要自己搭建管理后台Ruoyi已经提供了完整的流程设计、表单设计和权限管理界面其次是与SpringBoot的深度集成省去了大量基础配置工作最重要的是丰富的中国本土化案例GitHub上能看到很多企业落地实践。具体到技术实现上Ruoyi-Flowable在以下方面做了关键增强动态表单引擎支持通过JSON配置生成审批表单多租户隔离通过tenant_id实现流程实例隔离审批链可视化实时展示审批路径和当前节点消息通知集成内置邮件、短信、站内信等通知方式// 典型的多租户流程启动示例 ProcessInstance instance runtimeService.createProcessInstanceBuilder() .processDefinitionKey(expense_approval) .businessKey(EXP20230001) .tenantId(finance_department) .start();2. 审批中台的二次开发实战2.1 环境搭建与基础配置建议使用以下技术栈组合后端Ruoyi-Flowable 3.8.0 SpringBoot 2.7.x数据库MySQL 8.0需要调整事务隔离级别为READ_COMMITTED缓存Redis 6.x用于存储活跃流程实例在application.yml中需要特别注意的配置项flowable: async-executor-activate: true # 启用异步执行器 database-schema-update: true # 自动更新表结构 history-level: audit # 审计级别记录操作日志 mail: server-host: smtp.qiye.aliyun.com server-port: 4652.2 自定义审批节点处理器在实际项目中我们经常需要处理特殊的审批逻辑。比如跨部门会签、金额分级审批等。通过实现ActivityBehavior接口可以创建自定义节点public class DepartmentCounterSignBehavior implements ActivityBehavior { Override public void execute(DelegateExecution execution) { // 获取会签部门列表 ListString deptList (ListString)execution.getVariable(countersignDepts); // 动态创建并行审批任务 deptList.forEach(dept - { Task task taskService.createTaskQuery() .processInstanceId(execution.getProcessInstanceId()) .taskDefinitionKey(execution.getCurrentActivityId()) .taskCandidateGroup(dept) .singleResult(); // 设置部门专属表单 taskService.setVariableLocal(task.getId(), customForm, generateDeptForm(dept)); }); } }2.3 审批链路的性能优化在高并发场景下审批中台需要特别注意以下性能瓶颈流程实例查询为ACT_RU_EXECUTION表添加business_key索引历史数据归档配置Job定期清理完成的历史实例变量存储优化大文本变量建议存放到MongoDB等文档数据库实测数据对比单节点4C8G环境场景原生Flowable优化后Ruoyi流程启动120ms80ms并行网关210ms150ms历史查询300ms90ms3. 多系统流程统一接入方案3.1 标准化接入规范我们制定了企业级的流程接入规范接口协议所有系统必须通过RESTful API接入事件格式采用CloudEvents标准事件格式认证方式JWT 白名单IP校验典型的采购审批接入示例POST /api/workflow/start Headers: Authorization: Bearer xxxx X-System-Code: procurement Body: { processKey: purchase_approval, businessKey: PO20230001, variables: { applicant: zhangsan, amount: 15000, items: [...] } }3.2 流程路由策略通过自定义的RouterService实现不同系统的流程自动分配public class ProcessRouterServiceImpl implements ProcessRouterService { Autowired private ProcessDefinitionRepository definitionRepo; public String routeProcess(String systemCode, MapString, Object variables) { // 根据金额分级路由 if(finance.equals(systemCode)) { BigDecimal amount (BigDecimal)variables.get(amount); return amount.compareTo(new BigDecimal(10000)) 0 ? finance_level2 : finance_level1; } // 默认返回基础流程 return definitionRepo.findDefaultBySystem(systemCode); } }4. 微服务架构下的部署实践4.1 容器化部署方案我们的生产环境采用以下架构流程引擎服务独立部署3节点集群API网关Kong实现路由和限流监控体系Prometheus Grafana监控关键指标Docker Compose关键配置示例services: flowable-engine: image: ruoyi-flowable:3.8.0 environment: - SPRING_DATASOURCE_URLjdbc:mysql://mysql:3306/flowable - FLOWABLE_ASYNC_EXECUTOR_THREADS20 deploy: resources: limits: cpus: 2 memory: 4G4.2 关键运维指标监控必须监控的核心指标包括流程实例积压数active_executions异步作业队列长度async_jobs_waiting任务平均处理时长task_duration_avg对应的Prometheus告警规则示例groups: - name: flowable-alerts rules: - alert: ExecutionBacklog expr: flowable_active_executions 1000 for: 5m labels: severity: critical annotations: summary: 流程实例积压过多在实施过程中我们发现审批驳回场景最容易出现性能问题。通过引入Redis缓存驳回路径计算的结果使驳回响应时间从平均800ms降低到200ms以内。这个优化点特别建议在金融类审批场景中优先实施。
从零到一:基于Ruoyi-Flowable构建企业级审批中台
1. 为什么选择Ruoyi-Flowable作为审批中台基础框架在快速发展的互联网企业中审批流程往往分散在各个业务系统中。OA系统处理日常行政流程财务系统处理报销审批HR系统处理人事变动。这种割裂的状态会导致流程标准不统一、数据孤岛、维护成本高等问题。而Ruoyi-Flowable作为基于Flowable工作流引擎的二次开发框架恰好能解决这些痛点。我去年参与过一个电商平台的审批中台项目最初团队考虑过Activiti、Camunda等方案最终选择了Ruoyi-Flowable。主要原因有三点首先是开箱即用的可视化设计器相比原生Flowable需要自己搭建管理后台Ruoyi已经提供了完整的流程设计、表单设计和权限管理界面其次是与SpringBoot的深度集成省去了大量基础配置工作最重要的是丰富的中国本土化案例GitHub上能看到很多企业落地实践。具体到技术实现上Ruoyi-Flowable在以下方面做了关键增强动态表单引擎支持通过JSON配置生成审批表单多租户隔离通过tenant_id实现流程实例隔离审批链可视化实时展示审批路径和当前节点消息通知集成内置邮件、短信、站内信等通知方式// 典型的多租户流程启动示例 ProcessInstance instance runtimeService.createProcessInstanceBuilder() .processDefinitionKey(expense_approval) .businessKey(EXP20230001) .tenantId(finance_department) .start();2. 审批中台的二次开发实战2.1 环境搭建与基础配置建议使用以下技术栈组合后端Ruoyi-Flowable 3.8.0 SpringBoot 2.7.x数据库MySQL 8.0需要调整事务隔离级别为READ_COMMITTED缓存Redis 6.x用于存储活跃流程实例在application.yml中需要特别注意的配置项flowable: async-executor-activate: true # 启用异步执行器 database-schema-update: true # 自动更新表结构 history-level: audit # 审计级别记录操作日志 mail: server-host: smtp.qiye.aliyun.com server-port: 4652.2 自定义审批节点处理器在实际项目中我们经常需要处理特殊的审批逻辑。比如跨部门会签、金额分级审批等。通过实现ActivityBehavior接口可以创建自定义节点public class DepartmentCounterSignBehavior implements ActivityBehavior { Override public void execute(DelegateExecution execution) { // 获取会签部门列表 ListString deptList (ListString)execution.getVariable(countersignDepts); // 动态创建并行审批任务 deptList.forEach(dept - { Task task taskService.createTaskQuery() .processInstanceId(execution.getProcessInstanceId()) .taskDefinitionKey(execution.getCurrentActivityId()) .taskCandidateGroup(dept) .singleResult(); // 设置部门专属表单 taskService.setVariableLocal(task.getId(), customForm, generateDeptForm(dept)); }); } }2.3 审批链路的性能优化在高并发场景下审批中台需要特别注意以下性能瓶颈流程实例查询为ACT_RU_EXECUTION表添加business_key索引历史数据归档配置Job定期清理完成的历史实例变量存储优化大文本变量建议存放到MongoDB等文档数据库实测数据对比单节点4C8G环境场景原生Flowable优化后Ruoyi流程启动120ms80ms并行网关210ms150ms历史查询300ms90ms3. 多系统流程统一接入方案3.1 标准化接入规范我们制定了企业级的流程接入规范接口协议所有系统必须通过RESTful API接入事件格式采用CloudEvents标准事件格式认证方式JWT 白名单IP校验典型的采购审批接入示例POST /api/workflow/start Headers: Authorization: Bearer xxxx X-System-Code: procurement Body: { processKey: purchase_approval, businessKey: PO20230001, variables: { applicant: zhangsan, amount: 15000, items: [...] } }3.2 流程路由策略通过自定义的RouterService实现不同系统的流程自动分配public class ProcessRouterServiceImpl implements ProcessRouterService { Autowired private ProcessDefinitionRepository definitionRepo; public String routeProcess(String systemCode, MapString, Object variables) { // 根据金额分级路由 if(finance.equals(systemCode)) { BigDecimal amount (BigDecimal)variables.get(amount); return amount.compareTo(new BigDecimal(10000)) 0 ? finance_level2 : finance_level1; } // 默认返回基础流程 return definitionRepo.findDefaultBySystem(systemCode); } }4. 微服务架构下的部署实践4.1 容器化部署方案我们的生产环境采用以下架构流程引擎服务独立部署3节点集群API网关Kong实现路由和限流监控体系Prometheus Grafana监控关键指标Docker Compose关键配置示例services: flowable-engine: image: ruoyi-flowable:3.8.0 environment: - SPRING_DATASOURCE_URLjdbc:mysql://mysql:3306/flowable - FLOWABLE_ASYNC_EXECUTOR_THREADS20 deploy: resources: limits: cpus: 2 memory: 4G4.2 关键运维指标监控必须监控的核心指标包括流程实例积压数active_executions异步作业队列长度async_jobs_waiting任务平均处理时长task_duration_avg对应的Prometheus告警规则示例groups: - name: flowable-alerts rules: - alert: ExecutionBacklog expr: flowable_active_executions 1000 for: 5m labels: severity: critical annotations: summary: 流程实例积压过多在实施过程中我们发现审批驳回场景最容易出现性能问题。通过引入Redis缓存驳回路径计算的结果使驳回响应时间从平均800ms降低到200ms以内。这个优化点特别建议在金融类审批场景中优先实施。