java activit怎么画图
- 后端开发
- 2025-07-24
- 6
使用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
接口并