Spring Boot 集成 Activiti7(工作流引擎)完整版
介绍
Activiti 是一个工作流引擎,它可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言 BPMN2.0
进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由 Activiti
进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。(salvio修改)
升级新api (ProcessRuntime) 和(TaskRuntime)
官方网站:https://www.activiti.org/
环境搭建
安装插件
File` -> `Settings` -> `Plugins` -> `Activiti BPMN visualizer
引入依赖
<dependencies>
<!-- 引入Activiti7 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M4</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0.M4</version>
<type>pom</type>
</dependency>
<!-- 生成流程图 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>7.1.0.M4</version>
</dependency>
</dependencies>
1234567891011121314151617181920212223242526
配置文件
spring:
# 数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/activiti?useUnicode=true&useSSL=false&serverTimezone=UTC&characterEncoding=UTF8&nullCatalogMeansCurrent=true
username: "root"
password: "88888888"
type: com.zaxxer.hikari.HikariDataSource
hikari:
# 等待连接池分配连接的最大时间(毫秒),超过这个时长还没有可用的连接,则会抛出SQLException
connection-timeout: 30000
# 最小连接数
minimum-idle: 5
# 最大连接数
maximum-pool-size: 20
# 自动提交
auto-commit: true
# 连接超时的最大时长(毫秒),超时则会被释放(retired)
idle-timeout: 600000
# 连接池的名字
pool-name: DataSourceHikariCP
# 连接池的最大生命时长(毫秒),超时则会被释放(retired)
max-lifetime: 18000000
# activiti7配置
activiti:
# 自动部署验证设置:true-开启(默认)、false-关闭
check-process-definitions: false
# 保存历史数据
history-level: full
# 检测历史表是否存在
db-history-used: true
# 关闭自动部署
deployment-mode: never-fail
# 对数据库中所有表进行更新操作,如果表不存在,则自动创建
# create_drop:启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
# drop-create:启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
database-schema-update: true
# 解决频繁查询SQL问题
async-executor-activate: false
123456789101112131415161718192021222324252627282930313233343536373839
初始化数据表
修改配置文件后,进行项目启动,项目启动成功会自动生成 25
张数据表,如下所示:
注意:7.1.0.M4 版本自动生成的表字段不全,所以还需运行如下SQL:
-- ----------------------------
-- 修复Activiti7的M4版本缺失字段Bug
-- ----------------------------
alter table ACT_RE_DEPLOYMENT add column PROJECT_RELEASE_VERSION_ varchar(255) DEFAULT NULL;
alter table ACT_RE_DEPLOYMENT add column VERSION_ varchar(255) DEFAULT NULL;
12345
数据表解读
Activiti 使用到的表都是 ACT_
开头的,表名的第二部分表示用途。
- ACT_GE_ (
GE
) 表示 general 全局通用数据及设置,各种情况都使用的数据。 - ACT_HI_ (
HI
) 表示 history 历史数据表,包含着程执行的历史相关数据。 - ACT_RE_ (
RE
) 表示 repository 存储,包含的是静态信息。 - ACT_RU_ (
RU
) 表示 runtime 运行时,运行时的流程变量,用户任务,变量,职责(job)等运行时数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录 (salvio修改)
全局通用数据(ACT_GE_*)
表名 | 解释 |
---|---|
ACT_GE_BYTEARRAY | 二进制数据表,存储通用的流程定义和流程资源。 |
ACT_GE_PROPERTY | 系统相关属性,属性数据表存储整个流程引擎级别的数据。 |
历史数据表(ACT_HI_*)
表名 | 解释 |
---|---|
ACT_HI_ACTINST | 历史节点表 |
ACT_HI_ATTACHMENT | 历史附件表 |
ACT_HI_COMMENT | 历史意见表 |
ACT_HI_DETAIL | 历史详情表,提供历史变量的查询 |
ACT_HI_IDENTITYLINK | 历史流程人员表 |
ACT_HI_PROCINST | 历史流程实例表 |
ACT_HI_TASKINST | 历史任务实例表 |
ACT_HI_VARINST | 历史变量表 |
静态信息表(ACT_RE_*)
表名 | 解释 |
---|---|
ACT_RE_DEPLOYMENT | 部署信息表 |
ACT_RE_MODEL | 流程设计模型部署表 |
ACT_RE_PROCDEF | 流程定义数据表 |
运行数据(ACT_RU_*)
表名 | 解释 |
---|---|
ACT_RU_DEADLETTER_JOB | 无法执行工作表: 如果一个任务执行了很多次,都无法执行,那么这个任务会写到 |
ACT_RU_EVENT_SUBSCR | 运行时事件 throwEvent、catchEvent 时间监听信息表 |
ACT_RU_EXECUTION | 运行时流程执行实例 |
ACT_RU_IDENTITYLINK | 运行时流程人员表,主要存储任务节点与参与者的相关信息 |
ACT_RU_INTEGRATION | 运行时积分表 |
ACT_RU_JOB | 运行时定时任务数据表 |
ACT_RU_SUSPENDED_JOB | 暂停的工作,流程中有一个定时任务,如果把这个任务停止工作了,这个任务会在act_ru_suspended_job中写入数据 |
ACT_RU_TASK | 运行时任务节点表 |
ACT_RU_TIMER_JOB | 运行时定时器作业表 |
ACT_RU_VARIABLE | 运行时流程变量数据表 |
其它表
表名 | 解释 |
---|---|
ACT_EVT_LOG | 事件日志 |
ACT_PROCDEF_INFO | 流程定义的动态变更信息 |
快速入门
流程部署
流程部署方式分为两种:自动部署与手动部署
自动部署:将 bpmn
文件放入 resources
资源目录下的 processes
文件夹中,项目启动时则进行自动部署。(salvio修改)
spring:
# activiti7配置
activiti:
# 自动部署验证设置:true-开启(默认)、false-关闭
check-process-definitions: true
# 保存历史数据
history-level: full
# 检测历史表是否存在
db-history-used: true
# 关闭SpringAutoDeployment
deployment-mode: never-fail
# 对数据库中所有表进行更新操作,如果表不存在,则自动创建
database-schema-update: true
# 解决频繁查询SQL问题
async-executor-activate: false
123456789101112131415
手动部署:新建测试类,并编写流程部署测试方法。
自定流程
- 创建 *.bpmn20.xml 文件:New -> New Activity 6.x BPMN 2.x file
- 流程设计页面:选中
*.bpmn20.xml
文件,右键view BPMN(Activity ) Diagram
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="Part1_Deployment" name="Part1_Deployment" isExecutable="true">
<startEvent id="sid-26d6e725-878e-411d-b23d-6df4ae3cbd24"/>
<endEvent id="sid-03d64ced-963c-4506-a5b3-21b8a9dc4279"/>
<userTask id