java activit怎么画图
- 后端开发
- 2025-07-24
- 2040
使用Activiti流程引擎,通过BPMN 2.0标准定义流程图,部署后自动生成可视化图形,可结合Eclipse插件或在线工具直接绘制并
Java Activiti绘制流程图详解
环境准备与基础概念
依赖引入
使用Maven管理项目时,需在pom.xml中添加Activiti依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>7.1.0</version>
</dependency>
核心组件
| 组件名称 | 作用 |
|———|——|
| ProcessEngine | 流程引擎核心接口 |
| RepositoryService | 流程定义管理 |
| RuntimeService | 流程实例管理 |
| TaskService | 任务管理 |
| BpmnModelInstance | BPMN模型解析 |
流程图设计方式
可视化设计工具
| 工具类型 | 代表工具 | 特点 |
|———|———|——|
| 浏览器端模型器 | Activiti Modeler | 开源在线设计,支持BPMN 2.0 |
| 专业建模工具 | Camunda Modeler | 可视化拖拽,支持多人协作 |
| 代码驱动 | 程序化定义 | 通过Java API或XML手动构建 |
BPMN规范要素
!BPMN元素图示
Start Event → User Task → Exclusive Gateway → End Event
实战:创建请假审批流程
XML定义示例
<?xml version="1.0" encoding="UTF-8"?>
<definitions ...>
<process id="leaveProcess" name="请假流程">
<startEvent id="startNode"/>
<userTask id="applyTask" name="提交申请"/>
<exclusiveGateway id="approvalGate" name="审批决策"/>
<userTask id="leaderApproval" name="领导审批"/>
<endEvent id="endNode"/>
<sequenceFlow sourceRef="startNode" targetRef="applyTask"/>
<sequenceFlow sourceRef="applyTask" targetRef="approvalGate"/>
<sequenceFlow sourceRef="approvalGate" targetRef="leaderApproval" condition="${approvalResult==true}"/>
<sequenceFlow sourceRef="approvalGate" targetRef="endNode" condition="${approvalResult==false}"/>
<sequenceFlow sourceRef="leaderApproval" targetRef="endNode"/>
</process>
</definitions>
Java代码部署
%ignore_pre_ 3%复杂场景处理
多实例节点配置
<userTask id="batchApproval" name="批量审批">
<multiInstanceLoopCharacteristics>
<loopCardinality>3</loopCardinality>
<inputOutput>
<inputElement name="approver" type="string"/>
</inputOutput>
</multiInstanceLoopCharacteristics>
</userTask>
服务任务集成
<serviceTask id="autoCheck" name="自动校验" flowable:class="com.example.AutoValidator"/>
流程验证与调试
单元测试
@Test
public void testProcessExecution() {
ProcessInstance instance = runtimeService.startProcessInstanceByKey("leaveProcess");
assertEquals("提交申请", taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult().getName());
}
日志追踪
启用数据库表ACT_HI_ACTINST记录,通过:
SELECT FROM ACT_HI_ACTINST WHERE PROC_INSTANCE_ID_ = 'xxx' ORDER BY ACT_ID_;
高级绘图技巧
| 技术点 | 实现方案 |
|---|---|
| 动态流程 | 结合CandidateGroups和条件网关 |
| 子流程 | <callActivity>嵌套调用 |
| 表单集成 | 使用flowable:formField定义 |
FAQs
Q1:如何导入外部设计的BPMN文件?
A1:将BPMN文件放置在src/main/resources/processes目录下,通过addClasspathResource("path/to/file.bpmn")方法加载,注意检查XML命名空间是否符合Activiti要求。
Q2:如何在流程图中调用自定义Java类?
A2:在serviceTask节点添加flowable:class属性,
<serviceTask id="customTask" name="数据处理" flowable:class="com.example.DataProcessor"/>
确保该类实现JavaDelegate接口并
