Activiti - 最成熟的JAVA工作流框架
# Activiti - 最成熟的JAVA工作流框架
# 一、Activiti(工作流)基础
# 1、工作流概念
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
# 2、Activiti介绍
Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。
# 1)工作流相关概念
- 工作流:WorkFlow,是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
- 工作流建模:将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。
- 工作流解决的问题:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
- 工作流管理系统:WorkFlow Management System(WfMS),处理工作流的电脑软件系统。
- 主要功能:通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间、群体成员之间的信息交互。
- 工作流需要以靠工作流管理系统来实现。
- 计算机支持的协同工作:Computer Supported Cooperation Work(CSCW),普遍地研究一个群体如何在计算机的帮助下实现协同工作的。
- 工作流属于计算机支持的协同工作(CSCW)的一部分
- 工作流管理联盟:WorkFlow Management Coalition(WfMC),工作流技术标准化的工业组织,成立于1993年8月。
- 工作流管理联盟发布了用于工作流管理系统之间互操作的工作流参考模型,并相继制定了一系列工业标准。
# 2)为什么需要工作流
- 业务开发的烦恼(现存问题)
- 产品需求遗留,开发上线后需求经常改
- 业务代码复杂,版本修改需要尽快迭代上线
- 老项目二次开发,文档缺失,PM经常让RD刨代码梳理流程
- 工作流引擎对业务和开发的改变(工作流的好处)
- 可以快速响应,灵活调整线上流程
- 业务和开发基于流程模型沟通,基于业务建模快速部署
- 流程可视化,方便查看流程的运行进展
- 工作流对团队的作用
# 3)如何学习工作流
- 工作流引擎的技术选型(Activiti vs Jbpm)
- Activiti6.0的快速体验
- 初步认识BPMN2.0的元素
# 3、Activiti工作流引擎
ProcessEngine对象,这是Activiti工作的核心。
负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
# 4、Activiti数据库
Activiti数据库支持:
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
- ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
- ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
- ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
- ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
- ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
# (1)资源库流程规则表
- act_re_deployment 部署信息表
2) act_re_model 流程设计模型部署表
3) act_re_procdef 流程定义数据表
4) act_procdef_info 流程定义信息表
# (2)运行时数据库表
- act_ru_execution 运行时流程执行实例表
2) act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
3) act_ru_task 运行时任务节点表
4) act_ru_variable 运行时流程变量数据表
(下述是不常用的表)
5) act_ru_job
6) act_ru_deadletter_job
7) act_ru_suspended_job
8) act_ru_timer_job
9) act_ru_event_subscr
# (3)历史数据库表
- act_hi_actinst 历史节点表
2) act_hi_attachment 历史附件表
3) act_hi_comment 历史意见表
4) act_hi_identitylink 历史流程人员表
5) act_hi_detail 历史详情表,提供历史变量的查询
6) act_hi_procinst 历史流程实例表
7) act_hi_taskinst 历史任务实例表
8) act_hi_varinst 历史变量表
# (4)组织机构表
- act_id_group 用户组信息表
2) act_id_info 用户扩展信息表
3) act_id_membership 用户与用户组对应信息表
4) act_id_user 用户信息表
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
# (5)通用数据表
- act_ge_bytearray 二进制数据表
2) act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
# (6)全局日志表
1)act_evt_log 日志记录表
# 5、Activiti接口
7大接口
- RepositoryService:提供一系列管理流程部署和流程定义的API。
- RuntimeService:在流程运行时对流程实例进行管理与控制。
- TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
- IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
- ManagementService:提供对流程引擎进行管理和维护的服务。
- HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
- FormService:表单服务。
# 二、Activiti(工作流)简单体验
# 1、工作流技术选型
- Activiti
- Flowable
- jBPM
- BPMN2.0
- ccflow
- Snaker
# 1)jBPM和Activiti的对比
# 2)为什么选择Activiti6.0
- 老牌、成熟、稳定、满足BPMN2.0规范
- 用户众多,社区活跃,趋势良好
- 易于上手,基于Spring、MyBatis等常用互联网技术栈
# 2、部署Activiti6.0环境
# 1)体验Activiti官网
Activiti官网地址:https://www.activiti.org/
# 2)准备环境并部署Activiti6.0
- 物料
- Activiti软件包,activiti-6.0.0.zip
- Java环境,JDK 1.8.0_161
- Servlet容器 apache-tomcat-8.0.50.zip
- 运行Activiti War
- 登陆localhost:8080/activiti-app
- 用户名/密码:admin/test
- 进入activiti-app,进行相关操作
# 三、SpringBoot2 集成 Activiti
# 1、SpringBoot集成Activiti7
官方文档:https://activiti.gitbook.io/activiti-7-developers-guide/getting-started/getting-started-activiti-core
_注意:_官方当前Activiti7版本为 7.1.0.M5,经验证,此版本在SpringBoot 2.1.x运行稳定,并且本人不建议将SpringBoot升级到 2.2.x。
# 1)快速生成SpringBoot项目包
# 2)添加Activiti7相关依赖
①Activiti7 - SpringBoot2核心依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
2
3
4
5
6
7
8
②Activiti7 Core 版本依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0.M5</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
2
3
4
5
6
7
8
9
10
11
③Activiti7 官方repo
<repositories>
<repository>
<id>alfresco</id>
<name>Activiti Releases</name>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
2
3
4
5
6
7
8
9
10
# 3)数据库配置
create schema activiti7 default character set utf8 collate utf8_general_ci;
GRANT ALL ON activiti7.* TO 'cat'@'%';
flush privileges;
2
3
4
5
# 2、SpringBoot集成Activiti6(推荐)
# 3、SpringBoot集成Acitiviti在线设计工具
(基于Activiti 5.22 中的 Activiti Modeler)
# 四、Activiti案例与配置
参考:Activiti使用手册(1)- 案例与配置,https://www.yuque.com/leee/spring-boot/activiti-config。
# 五、Activiti Java API
参考:Activiti使用手册(2)- Java API,https://www.yuque.com/leee/spring-boot/activiti-api
# 六、Activiti 数据库设计
参考:Activiti使用手册(3)- 数据库设计,https://www.yuque.com/leee/spring-boot/activiti-database
# 七、Bpmn2.0 流程定义规范
参考:Activiti使用手册(4)- Bpmn2.0规范,https://www.yuque.com/leee/spring-boot/activiti-bpmn20
# 八、Activiti6 + SpringBoot2 实战
参考资料
- activiti(工作流)初步学习记录,博客园
- Activiti6详细教程,CSDN,ZhaoYingChao88
- Activit-7-developers-guide,Activiti
- Acitiviti核心API,简书
- 01
- Activiti使用手册(4)- Bpmn2规范06-11
- 02
- linux手动RPM安装gcc,g++06-11