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...)
posted on 2026-07-24 21:26  冬冬咚  阅读(8)  评论(0)    收藏  举报