目录
Flowable 简介
Flowable 由 Activiti 项目分支演变而来,用于构建和管理各种业务流程。其核心是一个通用的流程引擎,支持 BPMN 2.0(Business Process Model and Notation)标准,这是一种业务流程建模和执行的国际标准。Flowable 完全支持 BPMN 2.0,使得非技术人员也能参与流程的设计。
BPMN 是一种用于业务流程建模的标准化图形表示法。它定义了一套符号和规则,用于描述业务流程的各个方面,如任务、事件、网关等。BPMN 的目标是提供一种统一的、易于理解的图形化语言来表示业务流程。
BPMN 2.0是 BPMN 规范的2.0版本,是当前比较稳定且广泛使用的版本。
Flowable 7.x 是目前 Flowable 的最新版本,该版本基于 JDK 17,如果使用 Spring Boot 集成的话,需要 Spring Boot 的版本最少为 SpringBoot 3.x。
流程设计器
安装
BPMN 定义了如何用符号来描述业务流程,这种符号组合在一起就是个模型,但是程序不能直接识别这些符号,因此 BPMN 规定使用 XML 格式来编码业务流程模型,这种编码形式称为 BPMN XML。
我们一般使用流程设计器画图业务流程模型,再导出为 BPMN 规范的 XML 文件,然后再使用。
Flowable 官方有提供一个名为 Flowable-UI 的东西,这是一个 Web 应用,可以直接在这上面设计业务流程,但是 Flowable-UI 从 Flowable 7 以后就没提供了,但是经过我的测试,用旧版本的UI 也可以实现对应功能,以下提供一个我目前使用版本的 Docker 命令:
docker run -p 8080:8080 flowable/flowable-ui:6.8.0
使用以下命令启动后,访问地址端口,可以看到以下界面:
使用默认的用户名密码登录:
user: admin
password: test
使用
打开建模应用程序,可以看到以下界面:
点击创建流程,可以创建一个业务流程,其中模型 key 用于唯一标识一个业务流程模型,这个后面会有用的,模型名称可以重复:
创建完成后,进入流程的编辑页面:
编辑完成后,保存,查看模型,会进到这个界面,这里可以将模型导出成为XML:
SpringBoot 3 整合
使用 SpringBoot 整合,首先需要引入以下依赖:
<!-- https://mvnrepository.com/artifact/org.flowable/flowable-spring-boot-starter -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
由于 Flowable 运行需要数据库的支持,所以需要配置一个数据源:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/flowable_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
flowable:
# 关闭定时任务JOB
async-executor-activate: false
# 在引擎启动时,如果数据库架构与 Flowable 引擎期望的架构不一致,Flowable 会自动更新数据库架构。这包括创建缺失的表和列,以及修改现有的表和列以匹配最新版本
database-schema-update: true
配置数据源后,启动项目,Flowable会自动识别数据库,并帮你新建对应的表,大约有70个。
表结构
主要表前缀及其用途:
- ACT_RE_*:RE 代表 repository(存储)。这些表包含静态信息,如流程定义和流程的资源(图片、规则等)。RepositoryService 接口操作的表。
- ACT_RU_*:RU 代表 runtime。这些表存储运行时信息,如流程实例、用户任务、变量、作业等。Flowable 只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录,以保证运行时表小且快。RuntimeService 接口操作的表。
- ACT_HI_*:HI 代表 history。这些表存储历史数据,如已完成的流程实例、变量、任务等。HistoryService 接口操作的表。
- ACT_ID_*:ID 表示 identity(组织机构)。这些表包含标识的信息,如用户、用户组等。IdentityService 接口操作的表。
- ACT_GE_*:通用数据表,用于存储各种情况下都可能需要的数据。
核心表:
- act_ge_bytearray:二进制数据表,用于存储流程定义、流程模板、流程图的图片等
- act_re_deployment:记录部署操作的表,一次部署操作对应一条记录
- act_re_procde:流程定义表,一次部署可以部署多个流程,一个流程对应一条记录
- act_ru_task:存储运行中流程的任务节点信息,常用于查询人员或部门的待办任务。
- act_ru_execution:运行时流程执行实例表,记录运行中流程运行的各个分支信息。
- act_hi_procinst:历史流程实例表,存储流程实例历史数据(包含正在运行的流程实例)。
流程部署
- 导出流程模型 XML
- 通过 ProcessEngine 获取 RepositoryService,或直接注入 RepositoryService
private ProcessEngine processEngine; private RepositoryService repositoryService; @Autowired public void setRepositoryService(RepositoryService repositoryService) { this.repositoryService = repositoryService; } @Autowired public void setProcessEngine(ProcessEngine processEngine) { this.processEngine = processEngine; } @Test public void test() { System.out.println(repositoryService != null && repositoryService == processEngine.getRepositoryService()); }
- 部署流程图,一次部署可以部署多个
@Test public void testDeploy(</