Activiti 7数据库表结构全解析:从act_re到act_ru,看完这篇就懂了

发布时间:2026/6/4 7:44:03

Activiti 7数据库表结构全解析:从act_re到act_ru,看完这篇就懂了 Activiti 7数据库表结构全解析从act_re到act_ru的深度实践指南第一次接触Activiti 7的开发者往往会被它自动生成的数十张数据库表搞得晕头转向。这些表名看似有规律却又难以捉摸字段含义晦涩难懂。本文将带你穿透迷雾从数据库视角彻底掌握Activiti 7的工作流运行机制。1. Activiti表结构设计哲学Activiti的表命名遵循一套严谨的语义化规则每个前缀都暗藏玄机。理解这套命名体系相当于拿到了破解工作流引擎的密钥。核心表分类逻辑act_re_*资源库(Repository)表存储静态流程定义act_ru_*运行时(Runtime)表记录运行中实例的临时数据act_hi_*历史(History)表归档已完成流程的轨迹act_id_*身份(Identity)表管理用户与权限体系act_ge_*通用(General)表存放二进制资源等提示开发环境建议开启databaseSchemaUpdate自动建表但生产环境务必使用SQL脚本初始化下表展示了主要表类型的生命周期差异表类型数据产生时机数据销毁时机典型用途RE表流程部署时主动删除部署版本控制RU表启动实例时流程结束时运行时监控HI表节点流转时永久保存审计分析2. 资源库表(act_re_)深度剖析资源库表是流程定义的基因库部署流程时产生的DNA信息全存储于此。以请假流程为例部署后重点关注三张核心表act_re_deployment部署主表SELECT * FROM act_re_deployment WHERE NAME_请假流程;ID_部署唯一标识DEPLOY_TIME_部署时间戳CATEGORY_分类标签act_re_procdef流程定义表ProcessDefinitionQuery query repositoryService .createProcessDefinitionQuery() .deploymentId(deploymentId);关键字段KEY_流程定义键bpmn文件中的idVERSION_版本号自动递增RESOURCE_NAME_bpmn文件路径DGRM_RESOURCE_NAME_流程图路径act_ge_bytearray二进制资源表 存储流程定义的双胞胎文件.bpmn20.xml流程模型文件.png流程可视化图示3. 运行时表(act_ru_)实时追踪运行时表就像流程的心电图实时反映工作流状态。启动请假流程实例后这些表开始活跃act_ru_execution执行实例表-- 查询运行中的流程实例 SELECT * FROM act_ru_execution WHERE PROC_INST_ID_流程实例ID;字段解析BUSINESS_KEY_业务系统关联键ACT_ID_当前活动节点IDIS_ACTIVE_是否活跃状态act_ru_task任务实例表// 查询待办任务 ListTask tasks taskService.createTaskQuery() .taskAssignee(张三) .list();关键操作# 伪代码展示任务生命周期 taskService.claim(taskId, userId) # 签收任务 taskService.complete(taskId) # 完成任务 taskService.setVariable(taskId, days, 3) # 设置变量act_ru_variable流程变量表 存储流程中的动态参数支持多种类型基本类型string、integer、boolean等序列化对象Serializable日期类型Date、Timestamp4. 历史表(act_hi_)审计分析历史表是流程的黑匣子即使流程结束仍可追溯完整轨迹。重点关注三张表act_hi_procinst流程实例历史-- 查询已完成流程的平均耗时 SELECT AVG(DURATION_) FROM act_hi_procinst WHERE END_TIME_ IS NOT NULL;act_hi_taskinst任务实例历史 典型分析场景任务处理时效分析审批人工作负载统计流程瓶颈节点识别act_hi_varinst变量变更历史HistoricVariableInstanceQuery query historyService .createHistoricVariableInstanceQuery() .processInstanceId(procInstId);5. 实战请假流程数据流转全追踪让我们用具体案例串联各表数据变化阶段一流程部署act_re_deployment插入部署记录act_ge_bytearray存储流程图文件act_re_procdef生成流程定义阶段二启动实例# 启动流程实例 processInstance runtimeService.startProcessInstanceByKey( leaveProcess, businessKey2023001 );数据影响act_ru_execution生成主执行记录act_ru_task创建首个任务act_hi_procinst记录实例开始act_hi_taskinst初始化任务阶段三审批流转当张三提交请假申请后act_ru_task更新为李四的审批任务act_hi_actinst记录提交申请节点完成act_hi_varinst可能更新请假天数等变量阶段四流程结束act_ru_*表数据自动清除act_hi_procinst更新结束时间act_hi_taskinst记录审批完成6. 高级查询与性能优化面对复杂的业务流程需要掌握高效查询技巧跨表关联查询-- 查询审批超时的任务 SELECT t.* FROM act_hi_taskinst t JOIN act_hi_procinst p ON t.PROC_INST_ID_ p.ID_ WHERE t.END_TIME_ IS NULL AND p.END_TIME_ IS NULL AND DATEDIFF(NOW(), t.CREATE_TIME_) 3;历史数据归档策略定期清理配置HistoryService的清理策略分表存储按业务日期水平分表ES同步将历史数据同步到Elasticsearch// 历史数据清理配置 managementService.executeCommand(new CustomHistoryCleanupCmd());索引优化建议-- 为高频查询字段添加索引 CREATE INDEX idx_act_hi_task_assignee ON act_hi_taskinst(ASSIGNEE_); CREATE INDEX idx_act_ru_task_procinst ON act_ru_task(PROC_INST_ID_);7. 常见问题排查指南问题一流程卡死排查步骤检查act_ru_task是否存在待办任务查询act_ru_execution确认当前节点查看act_ru_event_subscr事件订阅问题二变量丢失解决方案检查变量作用域流程级/任务级验证变量类型是否支持序列化排查act_ge_bytearray中的异常数据问题三性能瓶颈优化方向监控act_ru_job表中的异步作业调整asyncExecutor线程池配置优化流程设计减少并行分支// 获取引擎健康状态 MapString, String props managementService.getProperties(); String jobExecutorStatus props.get(jobExecutorActivate);理解Activiti的数据库设计后曾经的黑盒操作现在变得透明可见。建议在日常开发中多结合数据库状态分析问题这种数据库视角的调试方法往往能快速定位问题根源。

相关新闻