Flowable 是一个轻量级、高性能的 BPMN(业务流程建模符号) 和 CMMN(案例管理模型与符号) 引擎,它最初是从 Activiti 项目中衍生出来的,由 Activiti 的核心团队成员 Tom Baeyens 和 Joram Barrez 创建。
以下是关于 Flowable 的核心要点介绍:
核心特点
- 轻量级与高性能:相比其前身 Activiti,Flowable 在性能上进行了大量优化,启动更快,内存占用更低。
- 开源免费:采用 Apache 2.0 许可证,商业友好,无许可证费用。
- 标准化支持:
- BPMN 2.0:用于定义业务流程。
- CMMN 1.1:用于案例管理(处理非结构化、不可预测的流程)。
- DMN 1.3:用于决策模型和决策表。
- 多数据库支持:支持 MySQL、PostgreSQL、Oracle、SQL Server、H2 等主流数据库。
- 易于集成:提供 REST API、Java API,并可与 Spring Boot、Spring Cloud 等框架无缝集成。
主要模块
Flowable 不是一个单一的工具,而是一套模块化的引擎:
- Flowable Engine:核心 BPMN 和 CMMN 引擎。
- Flowable DMN Engine:用于执行决策表。
- Flowable REST:提供标准的 RESTful API,便于前端或其他系统调用。
- Flowable Modeler:基于 Web 的流程设计器(类似 Activiti Modeler),用于可视化创建和编辑流程定义。
- Flowable Task:任务管理应用,用于查看和处理待办任务。
- Flowable Admin:管理控制台,用于监控流程实例、用户、角色等。
与 Activiti 的关系
- 起源:Flowable 是 Activiti 6.x 分支后的独立项目。
- 区别:
- Flowable 更新更频繁,社区活跃度高。
- Flowable 对代码进行了重构,性能更好,bug 更少。
- 两者 API 高度兼容,迁移成本较低。
- Activiti 已被 Alfresco 收购,而 Flowable 由独立团队维护,更加中立。
典型应用场景
- 企业工作流审批(如请假、报销、合同审批)。
- 订单处理流程自动化。
- 客户服务案例管理(CMMN)。
- 复杂业务规则引擎(DMN)。
快速开始示例(Spring Boot + Flowable)
添加依赖(Maven)
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.8.0</version> <!-- 请使用最新版本 -->
</dependency>
配置 application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/flowable_db?useSSL=false&serverTimezone=UTC
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
flowable:
async-executor-activate: false # 生产环境建议设为 true
database-schema-update: true # 自动更新数据库表结构
编写流程定义(BPMN XML)
创建一个 leave.bpmn20.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
targetNamespace="http://flowable.org/bpmn">
<process id="leaveProcess" name="Leave Process">
<startEvent id="start" name="Start"/>
<userTask id="approveTask" name="Approve Leave" flowable:assignee="${approver}"/>
<endEvent id="end" name="End"/>
<sequenceFlow id="flow1" sourceRef="start" targetRef="approveTask"/>
<sequenceFlow id="flow2" sourceRef="approveTask" targetRef="end"/>
</process>
</definitions>
启动流程
@Service
public class LeaveService {
@Autowired
private RuntimeService runtimeService;
public void startProcess(String employee, String approver) {
Map<String, Object> variables = new HashMap<>();
variables.put("approver", approver);
variables.put("employee", employee);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(
"leaveProcess",
"leave-" + System.currentTimeMillis(),
variables
);
System.out.println("Process started with ID: " + processInstance.getId());
}
}
官方资源
- 官网:https://www.flowable.org/
- GitHub:https://github.com/flowable/flowable-engine
- 文档:https://www.flowable.org/docs/
如果你有关于 Flowable 的具体问题(如如何配置事务、如何处理异常、如何集成前端等),欢迎继续提问!
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/477494.html
