万普插件库

jQuery插件大全与特效教程

深入理解Activiti工作流:从原理到实战

一、工作流核心概念

1.1 什么是工作流?

工作流(Workflow)是将业务过程分解为定义良好的任务角色规则,通过计算机系统自动执行和监控的技术。就像工厂的流水线,每个环节都有明确的处理规则和传递路径。

1.2 Activiti的四大核心对象

概念

类比解释

数据库表示例

ProcessDefinition(流程定义)

设计图纸

ACT_RE_PROCDEF

ProcessInstance(流程实例)

按图纸建造的建筑

ACT_RU_EXECUTION

Task(任务)

工人需要完成的具体工序

ACT_RU_TASK

Identity(身份)

工人和工种的关系表

ACT_ID_*系列表

1.3 BPMN 2.0规范

业务流程建模符号标准,使用XML定义流程图。常见元素:

xml

<process id="leaveProcess" name="请假流程">
  <startEvent id="start"/>
  <userTask id="leaderAudit" name="主管审批"/>
  <exclusiveGateway id="decision"/>
  <endEvent id="end"/>
</process>

二、Activiti架构原理

2.1 引擎核心组件

mermaid

graph TD
    A[ProcessEngine] --> B[RepositoryService]
    A --> C[RuntimeService]
    A --> D[TaskService]
    A --> E[HistoryService]
    A --> F[IdentityService]
    
    B -->|管理流程定义| G[部署流程文件]
    C -->|控制流程实例| H[启动/推进流程]
    D -->|处理任务| I[签收/完成任务]
    E -->|历史数据| J[流程审计]

2.2 流程驱动机制

  1. 部署阶段:解析BPMN文件生成流程定义
  2. 运行阶段:通过命令模式执行流程跳转
  3. 持久化:使用MyBatis将运行时数据存入数据库
  4. 事务控制:每个流程操作都在独立事务中完成

三、快速配置指南

3.1 Spring Boot集成

xml

<!-- pom.xml -->
<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.1.0.M6</version>
</dependency>

3.2 数据库配置

yaml

# application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/activiti?useUnicode=true
    username: root
    password: 123456
  activiti:
    database-schema-update: true # 自动创建表
    history-level: full         # 完整历史记录

3.3 流程文件示例

创建
src/main/resources/processes/leave.bpmn20.xml:

xml

<definitions>
  <process id="leave" name="请假流程">
    <startEvent id="start"/>
    <sequenceFlow sourceRef="start" targetRef="apply"/>
    
    <userTask id="apply" name="填写申请" 
      activiti:assignee="${applicant}"/>
    
    <sequenceFlow sourceRef="apply" targetRef="approve"/>
    
    <userTask id="approve" name="经理审批"
      activiti:candidateGroups="manager"/>
    
    <sequenceFlow sourceRef="approve" targetRef="end"/>
    <endEvent id="end"/>
  </process>
</definitions>

运行 HTML

四、核心API实战

4.1 部署流程

java

@Autowired
private RepositoryService repositoryService;

public void deploy() {
    repositoryService.createDeployment()
        .addClasspathResource("processes/leave.bpmn20.xml")
        .name("请假流程部署")
        .deploy();
}

4.2 启动流程实例

java

@Autowired
private RuntimeService runtimeService;

public void startProcess(String applicant) {
    Map<String, Object> variables = new HashMap<>();
    variables.put("applicant", applicant);
    runtimeService.startProcessInstanceByKey("leave", variables);
}

4.3 处理任务

java

@Autowired
private TaskService taskService;

public void completeTask(String taskId) {
    Map<String, Object> variables = new HashMap<>();
    variables.put("approved", true);
    taskService.complete(taskId, variables);
}

五、可视化监控

5.1 Activiti Explorer

官方提供的Web控制台,可以:

  • 查看流程定义
  • 监控运行实例
  • 执行任务操作
  • 生成流程图

5.2 流程图高亮显示

java

ProcessDiagramGenerator diagramGenerator = 
    processEngine.getProcessEngineConfiguration()
                .getProcessDiagramGenerator();

InputStream diagram = diagramGenerator.generateDiagram(
    bpmnModel, 
    "png", 
    runtimeService.getActiveActivityIds(processInstanceId),
    Collections.emptyList(),
    "宋体", 
    "宋体", 
    null);

六、典型应用场景

6.1 请假审批流程

mermaid

graph LR
    A[员工提交] --> B{经理审批}
    B -->|同意| C[HR备案]
    B -->|驳回| D[重新提交]
    C --> E[流程结束]

6.2 订单处理流程

mermaid

graph TD
    A[创建订单] --> B{金额检查}
    B -->|>1000| C[主管复核]
    B -->|<=1000| D[自动审核]
    C --> E[财务处理]
    D --> E
    E --> F[发货]

七、常见问题排查

7.1 流程无法启动

  • 检查流程定义是否部署成功
  • 验证BPMN文件语法是否正确
  • 确认启动时传递了必要的流程变量

7.2 任务不显示

  • 检查任务候选人/组的设置
  • 确认用户是否加入正确的组
  • 查看ACT_RU_TASK表数据

八、最佳实践建议

  1. 流程版本控制:使用version字段管理流程变更
  2. 变量管理:避免存储大对象,优先使用基本类型
  3. 性能优化
  4. 定期清理历史数据(ACT_HI_*)
  5. 使用异步服务(AsyncExecutor)
  6. 安全控制

java

identityService.setAuthenticatedUserId("admin");

九、扩展学习方向

  1. 监听器开发:实现ExecutionListener和TaskListener
  2. 会签功能:使用Multi-instance特性
  3. 动态流程:通过RuntimeService修改运行中的流程
  4. 集成方案:与Spring Security结合实现权限控制

总结
Activiti通过将业务流程抽象为可执行的模型,实现了业务逻辑与技术实现的解耦。建议从简单流程入手,逐步掌握以下技能树:

mermaid

graph TD
    A[基础概念] --> B[流程设计]
    B --> C[API使用]
    C --> D[系统集成]
    D --> E[性能优化]
    E --> F[高级特性]

通过本文的学习路线,开发者可以在2周内快速掌握Activiti的核心用法,并在实际项目中实现以下典型流程:

  • 审批类流程(OA系统)
  • 订单处理流程(电商系统)
  • 工单流转系统(客服系统)
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言