Activiti项目总结(7.24)
一、Activiti 是如何与业务结合的?
1. 业务表与流程实例的绑定(双向关联)
- 业务标识(BusinessKey):将业务审核表(如
bus_package_audit)的主键设置为 Activiti 流程实例的BusinessKey。这样可以通过业务主键快速定位到对应的流程实例。 - 流程实例ID(InstanceId):在业务审核表中增加一个字段存储流程实例的
ID。这样可以通过流程实例ID反查业务数据,实现流程与业务的解耦与关联。
2. 部署(Deployment)与流程定义(ProcessDefinition)的关系
-
一次部署操作(Deploy)会在部署表(
ACT_RE_DEPLOYMENT)中生成一条记录,并解析 BPMN 文件生成对应的流程定义(ACT_RE_PROCDEF)。 -
版本控制:如果多次部署使用的是同一个
processKey(流程图中的 id),Activiti 会自动升级版本号(Version);如果是不同的processKey,则视为完全不同的流程定义。 -
级联关系:流程定义是随着部署产生的,删除流程定义实际上就是删除对应的部署记录。
-
配置项:
check-process-definitions: false # 启动时是否自动检查并部署 resources/processes 下的流程文件
3. 流程实例(ProcessInstance)的构成
- 发起审批(启动流程)时,会生成一个流程实例。在 Activiti 底层,流程实例本身也是一个特殊的执行流(Execution),因此它同时包含了执行(Execution)和任务(Task)的概念。
4. 核心查询方法(createXxxQuery)
- 流程定义相关:
createProcessDefinitionQuery--->RepositoryService - 流程实例相关:
createProcessInstanceQuery--->RuntimeService - 任务相关:
createTaskQuery--->TaskService - 历史数据相关:
createHistoricTaskInstanceQuery/createHistoricProcessInstanceQuery--->HistoryService
5. Service 的职责划分
RepositoryService:负责“静态”资源,如流程定义的部署、查询、删除。RuntimeService:负责“运行时”数据,如启动流程实例、查询正在运行的实例、管理流程变量。TaskService:负责“任务”管理,如查询待办任务、办理任务(Complete)、委派任务。HistoryService:负责“历史”数据,查询已结束的流程、已办任务、历史变量等。
6. 任务审批机制
- Activiti 中完成任务只有一个核心方法:
taskService.complete(taskId, variables)。 - 没有专门的“审批通过”或“审批拒绝”方法。流程走向哪条分支(如通过或拒绝),完全取决于在
complete时传入的流程变量(Variables),由 BPMN 中的排他网关(Exclusive Gateway)根据变量值进行判断。
7. 流程图的显示方式
- 方式一(部署时携带图片):部署时同时上传
.bpmn20.xml和.png文件。Activiti 会将它们分别存入ACT_GE_BYTEARRAY表,字段名分别为RESOURCE_NAME(BPMN)和DGRM_RESOURCE_NAME(图片)。前端直接通过接口获取图片流显示即可。 - 方式二(动态生成图片):部署时只上传
.bpmn20.xml。后端通过RepositoryService.getBpmnModel()获取模型,再利用ProcessDiagramGenerator动态生成 PNG 图片流返回给前端。
二、ProcessEngine、BPMN 与 Service 的关系
1. 数据库基础
- Activiti 是依赖关系型数据库(如 MySQL)运行的,默认包含 25 张表(以
ACT_开头)。
2. ProcessEngine(流程引擎)的核心地位
ProcessEngine是 Activiti 的心脏,负责整体维护这 25 张表的生命周期。- 它是获取所有
Service的入口(例如processEngine.getTaskService())。在 Spring Boot 集成环境下,它会根据配置文件自动初始化,并将各个 Service 注入到 Spring 容器中供我们直接使用。
3. 核心配置详解(application.yml)
spring:
activiti:
database-schema-update: true
# true: 启动时检查表结构,没有则创建,有则更新(最常用)
# false: 只校验版本,不匹配则报错
# create_drop: 启动时创建,关闭时删除(仅适合单元测试)
db-history-used: true
# 是否启用历史表。若为 false,则只生成 17 张核心运行时表,无历史数据记录。
history-level: full
# 历史记录级别:
# none: 不记录历史
# activity: 记录流程实例和活动(节点)
# audit: 记录实例、活动及任务(默认值)
# full: 记录所有细节,包括流程变量(数据量最大,开发调试常用)
check-process-definitions: false
# 是否自动检查并部署 classpath:/processes/ 下的流程文件
use-strong-uuids: false
# ID生成策略。false 使用数据库自增或普通ID,true 使用强UUID(如 123456-7890...)
浙公网安备 33010602011771号