10分钟搞定流程自动化:Flowable BPMN 2.0可视化建模实战指南
你是否还在为业务流程混乱、审批效率低下而烦恼?是否想通过代码实现流程自动化却被复杂的框架文档劝退?本文将以财务报告审批流程为例,带你从零掌握Flowable-Engine(工作流引擎)的核心功能,10分钟内完成第一个可运行的流程自动化项目。读完本文你将获得:
- 用BPMN 2.0(业务流程模型和符号)设计可视化流程的能力
- 快速搭建Flowable开发环境的实操步骤
- 完整的流程部署与运行代码示例
- 常见流程节点(用户任务、网关、定时器)的配置方法
什么是BPMN 2.0?
BPMN(Business Process Model and Notation,业务流程模型与符号)2.0是一套全球通用的流程建模标准,它通过直观的图形符号和严格的XML规范,让业务人员和技术人员能够无缝协作。Flowable-Engine作为轻量级高效的流程引擎,完美支持BPMN 2.0标准,可帮助开发者快速实现流程自动化。
官方文档对BPMN 2.0的定义:"BPMN是一种广泛接受和支持的用于表示流程的标准符号"BPMN介绍文档。简单来说,BPMN就像流程界的"施工图",而Flowable则是"施工队",二者结合可将业务流程图直接转化为可执行的程序。
环境准备与快速上手
开发环境要求
Flowable-Engine需要以下环境支持:
- JDK 17+(必须,官方文档明确要求)环境要求
- Maven/Gradle构建工具
- 关系型数据库(H2、MySQL等,本文使用H2内存数据库)
- 流程设计工具(可选,如Flowable Designer或在线设计器)
10分钟实现财务报告审批流程
我们以"月度财务报告审批"为例,构建一个包含"编写报告"和"审核报告"两个环节的流程。这个流程虽然简单,但包含了BPMN的核心元素:开始事件、用户任务和结束事件。
步骤1:创建BPMN流程文件
在项目资源目录下创建FinancialReportProcess.bpmn20.xml文件,内容如下:
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:flowable="http://flowable.org/bpmn"
targetNamespace="Examples">
<process id="financialReport" name="月度财务报告审批流程">
<!-- 开始事件 -->
<startEvent id="theStart" />
<!-- 顺序流:从开始事件到编写报告任务 -->
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="writeReportTask" />
<!-- 编写报告任务(分配给财务组) -->
<userTask id="writeReportTask" name="编写月度财务报告">
<documentation>撰写月度财务报告并提交审核</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>accountancy</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<!-- 顺序流:从编写任务到审核任务 -->
<sequenceFlow id="flow2" sourceRef="writeReportTask" targetRef="verifyReportTask" />
<!-- 审核报告任务(分配给管理层) -->
<userTask id="verifyReportTask" name="审核月度财务报告">
<documentation>审核财务报告并确认发布</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>management</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<!-- 顺序流:从审核任务到结束事件 -->
<sequenceFlow id="flow3" sourceRef="verifyReportTask" targetRef="theEnd" />
<!-- 结束事件 -->
<endEvent id="theEnd" />
</process>
</definitions>
上述XML定义了一个包含两个用户任务的流程,其中accountancy和management是用户组名称,对应实际系统中的角色分配。
步骤2:流程部署与运行代码
创建Java类FinancialReportWorkflow.java,通过Flowable API完成流程部署、启动和任务处理:
public class FinancialReportWorkflow {
public static void main(String[] args) {
// 1. 创建流程引擎(使用内存数据库)
ProcessEngine engine = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration()
.buildProcessEngine();
// 2. 获取服务实例
RepositoryService repositoryService = engine.getRepositoryService();
RuntimeService runtimeService = engine.getRuntimeService();
TaskService taskService = engine.getTaskService();
// 3. 部署流程定义
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("FinancialReportProcess.bpmn20.xml")
.deploy();
System.out.println("流程部署ID: " + deployment.getId());
// 4. 启动流程实例
ProcessInstance instance = runtimeService.startProcessInstanceByKey("financialReport");
System.out.println("启动流程实例: " + instance.getId());
// 5. 查询财务组任务并处理
List<Task> tasks = taskService.createTaskQuery()
.taskCandidateGroup("accountancy")
.list();
System.out.println("财务组待处理任务数: " + tasks.size());
// 6. 申领并完成编写报告任务
Task writeTask = tasks.get(0);
taskService.claim(writeTask.getId(), "fozzie"); // 申领任务
taskService.complete(writeTask.getId()); // 完成任务
System.out.println("已完成任务: " + writeTask.getName());
// 7. 管理层审核任务处理
Task verifyTask = taskService.createTaskQuery()
.taskCandidateGroup("management")
.singleResult();
taskService.claim(verifyTask.getId(), "kermit");
taskService.complete(verifyTask.getId());
System.out.println("已完成任务: " + verifyTask.getName());
// 8. 验证流程是否结束
HistoricProcessInstance historicInstance = engine.getHistoryService()
.createHistoricProcessInstanceQuery()
.processInstanceId(instance.getId())
.singleResult();
System.out.println("流程结束时间: " + historicInstance.getEndTime());
}
}
BPMN核心元素可视化解析
基础流程结构
一个完整的BPMN流程包含以下核心元素,以我们的财务审批流程为例:
- 开始事件(Start Event):流程的起点,图中左侧空心圆。在XML中通过
<startEvent>定义,示例中ID为theStart。 - 用户任务(User Task):需要人工处理的环节,图中矩形节点。通过
<userTask>定义,需指定处理人或组用户任务分配。 - 顺序流(Sequence Flow):连接各个节点的箭头,XML中通过
<sequenceFlow>的sourceRef和targetRef指定流向。 - 结束事件(End Event):流程的终点,图中右侧加粗边框圆,XML中通过
<endEvent>定义。
常用流程控制元素
除基础元素外,Flowable还支持多种高级流程控制:
排他网关(Exclusive Gateway)
用于实现条件分支逻辑,如"审批通过/驳回"场景:
<exclusiveGateway id="decisionGateway" />
<sequenceFlow id="flow4" sourceRef="decisionGateway" targetRef="approvedTask">
<conditionExpression xsi:type="tFormalExpression">${approved == true}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow5" sourceRef="decisionGateway" targetRef="rejectedTask">
<conditionExpression xsi:type="tFormalExpression">${approved == false}</conditionExpression>
</sequenceFlow>
定时器事件(Timer Event)
可实现定时任务,如"3天后自动审批":
<boundaryEvent id="escalationTimer" attachedToRef="verifyReportTask">
<timerEventDefinition>
<timeDuration>P3D</timeDuration> <!-- 3天 -->
</timerEventDefinition>
</boundaryEvent>
定时器支持三种时间格式定时器定义:
timeDate:固定日期,如2023-12-31T23:59:59timeDuration:持续时间,如P2D(2天)timeCycle:循环周期,如R3/PT1H(每小时一次,共3次)
实际应用与扩展
与Spring Boot集成
在实际项目中,推荐使用Spring Boot Starter简化配置:
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
配置文件application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/flowable?serverTimezone=UTC
username: root
password: root
flowable:
process-definition-location-prefix: classpath:/processes/
database-schema-update: true
流程监控与管理
Flowable提供了Web应用监控流程实例:
- Flowable Task:任务管理界面
- Flowable Modeler:在线流程设计器
- Flowable Admin:流程管理控制台
这些工具可通过Docker快速部署,执行脚本后访问http://localhost:8080/flowable-task即可。
常见问题与解决方案
1. 流程定义ID与版本号
Flowable自动为流程定义生成ID,格式为key:version。当修改流程并重新部署时,版本号会自动递增流程定义ID规则。启动流程时推荐使用startProcessInstanceByKey方法,自动选择最新版本。
2. 任务分配与权限控制
除了示例中的组分配,还支持多种分配方式:
- 指定用户:
<formalExpression>kermit</formalExpression> - 表达式分配:
<formalExpression>${assignee}</formalExpression>(assignee为流程变量) - 多用户候选:通过
<candidateUsers>指定多个用户
3. 异步执行与事务
长时间运行的任务应配置为异步执行,避免阻塞流程:
<serviceTask id="longRunningTask"
flowable:async="true"
flowable:class="com.example.LongRunningService" />
下一步学习路径
本文示例只是BPMN功能的冰山一角,建议通过以下资源深入学习:
- 官方文档:BPMN构造详细说明
- 高级功能:流程迁移Process Instance Migration、表单集成、事件注册表
- 示例项目:Spring Boot集成示例
现在,你已经掌握了Flowable BPMN的核心技能!尝试修改本文的财务审批流程,添加"报告驳回"分支和"自动发送邮件"功能,体验流程自动化的强大魅力。如有疑问,可查阅Flowable官方论坛或提交Issue到项目仓库。
提示:Flowable所有内部实现类位于
.impl.包下,不建议直接使用这些类内部实现类说明。开发时应优先使用API接口,如RuntimeService、TaskService等。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
