Activiti 7数据库表结构全解析从25张表看懂工作流引擎如何运转当你在企业级应用中设计一个请假审批流程时是否好奇点击提交按钮后系统底层究竟发生了什么Activiti 7作为业界领先的工作流引擎其精妙的数据库设计正是支撑这一切运转的幕后英雄。本文将带你化身数据侦探深入剖析25张核心数据表的奥秘。1. 工作流数据的三重世界Activiti的数据库设计遵循清晰的逻辑分层将工作流数据划分为三个维度静态资源层act_re_*如同建筑蓝图存储流程定义、部署信息等不变元素运行时层act_ru_*类似施工现场记录正在执行的流程实例、任务等动态数据历史层act_hi_*相当于工程档案保存已完成流程的全部轨迹这种分层设计不仅提升查询效率更实现了数据生命周期管理的优雅解耦。例如当流程实例结束时运行时数据自动清除而历史数据永久留存。2. 静态资源表流程的基因库2.1 核心表结构解析表名关键字段业务含义act_re_deploymentID_, DEPLOY_TIME_部署包元信息act_re_procdefKEY_, VERSION_, RESOURCE_流程定义基本信息act_re_modelNAME_, REV_, EDITOR_流程模型设计数据这些表构成流程的DNA库。当开发者通过如下代码部署流程时Deployment deployment repositoryService.createDeployment() .addClasspathResource(leave.bpmn20.xml) .deploy();数据库会生成一条act_re_deployment记录并在act_re_procdef中创建对应的流程定义。有趣的是RESOURCE_字段实际存储的是BPMN文件的二进制内容这正是Activiti能完整还原流程设计的秘密。2.2 版本控制机制act_re_procdef表的VERSION_字段展现了Activiti的智能版本管理相同KEY_的流程多次部署时自动版本递增新流程实例默认使用最高版本历史流程仍关联原始版本这种设计既保证了流程迭代的灵活性又确保了历史数据的准确性。3. 运行时表流程的中央调度3.1 核心运行时表群**流程实例表act_ru_execution**的典型状态变迁流程启动时创建根执行流ROOT遇到并行网关时分裂为多个子执行流流程结束时自动清除任务处理实战案例-- 查询待办任务 SELECT * FROM act_ru_task WHERE ASSIGNEE_ zhangsan ORDER BY CREATE_TIME_ DESC;注意运行时表采用轻量化设计仅保留必要字段。完整上下文数据需结合变量表act_ru_variable查询。3.2 变量存储的智慧Activiti的变量存储策略值得玩味基本类型直接存储在act_ru_variable复杂对象序列化后存于act_ge_bytearray支持变量作用域流程实例级/任务级这种分级存储机制在保证灵活性的同时避免了不必要的性能开销。4. 历史表流程的时光机器4.1 历史数据全景记录历史表家族通过多维度留存流程足迹act_hi_procinst流程实例快照act_hi_taskinst任务执行轨迹act_hi_varinst变量变更历史act_hi_comment审批意见记录历史数据分析示例historyService.createHistoricProcessInstanceQuery() .finishedAfter(startDate) .processDefinitionKey(leaveProcess) .list();4.2 历史数据清理策略虽然历史表自动增长但Activiti提供了优雅的清理方案按时间窗口清理DELETE FROM act_hi_taskinst WHERE END_TIME_ DATE_SUB(NOW(), INTERVAL 1 YEAR);使用内置Job自动维护property namehistoryCleaningTimeCycle value0 0 2 * * ?/5. 表关联的深层逻辑5.1 关键外键关系网注根据规范要求此处不展示mermaid图表改用文字描述 流程实例PROC_INST_ID_作为核心枢纽 - 关联运行时执行流act_ru_execution - 关联历史流程实例act_hi_procinst - 关联变量记录act_ru_variable - 关联任务实例act_hi_taskinst5.2 查询性能优化实践针对常见业务场景的优化建议待办列表查询-- 建立复合索引 CREATE INDEX idx_ru_task_assignee ON act_ru_task(ASSIGNEE_, CREATE_TIME_);流程监控看板runtimeService.createProcessInstanceQuery() .active() .includeProcessVariables() .listPage(0, 10);6. 实战从数据库反推流程状态当遇到流程卡顿时可通过以下SQL快速诊断-- 检查阻塞节点 SELECT * FROM act_ru_task WHERE SUSPENSION_STATE_ 2; -- 分析变量异常 SELECT * FROM act_ru_variable WHERE TEXT_ LIKE %error%;我曾遇到一个典型案例并行网关后的任务始终无法触发。最终通过比对act_ru_execution与act_ru_task的数据发现是变量作用域设置错误导致的分支条件失效。
Activiti 7数据库表结构全解析:从25张表看懂工作流引擎如何运转
Activiti 7数据库表结构全解析从25张表看懂工作流引擎如何运转当你在企业级应用中设计一个请假审批流程时是否好奇点击提交按钮后系统底层究竟发生了什么Activiti 7作为业界领先的工作流引擎其精妙的数据库设计正是支撑这一切运转的幕后英雄。本文将带你化身数据侦探深入剖析25张核心数据表的奥秘。1. 工作流数据的三重世界Activiti的数据库设计遵循清晰的逻辑分层将工作流数据划分为三个维度静态资源层act_re_*如同建筑蓝图存储流程定义、部署信息等不变元素运行时层act_ru_*类似施工现场记录正在执行的流程实例、任务等动态数据历史层act_hi_*相当于工程档案保存已完成流程的全部轨迹这种分层设计不仅提升查询效率更实现了数据生命周期管理的优雅解耦。例如当流程实例结束时运行时数据自动清除而历史数据永久留存。2. 静态资源表流程的基因库2.1 核心表结构解析表名关键字段业务含义act_re_deploymentID_, DEPLOY_TIME_部署包元信息act_re_procdefKEY_, VERSION_, RESOURCE_流程定义基本信息act_re_modelNAME_, REV_, EDITOR_流程模型设计数据这些表构成流程的DNA库。当开发者通过如下代码部署流程时Deployment deployment repositoryService.createDeployment() .addClasspathResource(leave.bpmn20.xml) .deploy();数据库会生成一条act_re_deployment记录并在act_re_procdef中创建对应的流程定义。有趣的是RESOURCE_字段实际存储的是BPMN文件的二进制内容这正是Activiti能完整还原流程设计的秘密。2.2 版本控制机制act_re_procdef表的VERSION_字段展现了Activiti的智能版本管理相同KEY_的流程多次部署时自动版本递增新流程实例默认使用最高版本历史流程仍关联原始版本这种设计既保证了流程迭代的灵活性又确保了历史数据的准确性。3. 运行时表流程的中央调度3.1 核心运行时表群**流程实例表act_ru_execution**的典型状态变迁流程启动时创建根执行流ROOT遇到并行网关时分裂为多个子执行流流程结束时自动清除任务处理实战案例-- 查询待办任务 SELECT * FROM act_ru_task WHERE ASSIGNEE_ zhangsan ORDER BY CREATE_TIME_ DESC;注意运行时表采用轻量化设计仅保留必要字段。完整上下文数据需结合变量表act_ru_variable查询。3.2 变量存储的智慧Activiti的变量存储策略值得玩味基本类型直接存储在act_ru_variable复杂对象序列化后存于act_ge_bytearray支持变量作用域流程实例级/任务级这种分级存储机制在保证灵活性的同时避免了不必要的性能开销。4. 历史表流程的时光机器4.1 历史数据全景记录历史表家族通过多维度留存流程足迹act_hi_procinst流程实例快照act_hi_taskinst任务执行轨迹act_hi_varinst变量变更历史act_hi_comment审批意见记录历史数据分析示例historyService.createHistoricProcessInstanceQuery() .finishedAfter(startDate) .processDefinitionKey(leaveProcess) .list();4.2 历史数据清理策略虽然历史表自动增长但Activiti提供了优雅的清理方案按时间窗口清理DELETE FROM act_hi_taskinst WHERE END_TIME_ DATE_SUB(NOW(), INTERVAL 1 YEAR);使用内置Job自动维护property namehistoryCleaningTimeCycle value0 0 2 * * ?/5. 表关联的深层逻辑5.1 关键外键关系网注根据规范要求此处不展示mermaid图表改用文字描述 流程实例PROC_INST_ID_作为核心枢纽 - 关联运行时执行流act_ru_execution - 关联历史流程实例act_hi_procinst - 关联变量记录act_ru_variable - 关联任务实例act_hi_taskinst5.2 查询性能优化实践针对常见业务场景的优化建议待办列表查询-- 建立复合索引 CREATE INDEX idx_ru_task_assignee ON act_ru_task(ASSIGNEE_, CREATE_TIME_);流程监控看板runtimeService.createProcessInstanceQuery() .active() .includeProcessVariables() .listPage(0, 10);6. 实战从数据库反推流程状态当遇到流程卡顿时可通过以下SQL快速诊断-- 检查阻塞节点 SELECT * FROM act_ru_task WHERE SUSPENSION_STATE_ 2; -- 分析变量异常 SELECT * FROM act_ru_variable WHERE TEXT_ LIKE %error%;我曾遇到一个典型案例并行网关后的任务始终无法触发。最终通过比对act_ru_execution与act_ru_task的数据发现是变量作用域设置错误导致的分支条件失效。