- Activiti简介
- Activiti流程的生命周期
- 流程定义
- 流程部署
- 流程启动
- 节点任务完成
- 流程暂停和激活
- 流程结束
- Activiti流程元素
- 事件
- 定时器事件
- 错误事件
- 信号事件
- 消息事件
- 启动事件
- 结束事件
- 边界事件
- 捕获中间事件
- 抛出中间事件
- 顺序流
- 网关
- 任务
- 用户任务
- 脚本任务
- Java服务任务
- Web服务任务
- 业务规则任务
- 邮件任务
- Mule任务和Camel任务
- 手动任务
- JAVA接收任务
- Shell任务
- 执行监听器和任务监听器
- 补偿处理器
- 多实例
- 子流程
- 事件子流程
- 事务子流程
- 调用活动
- Activiti流程使用场景
- 任务发起
- 任务审批
- 系统自动流程
- 多人任务审批
- 任务退回
- 子流程
- 任务通知
- Activiti7与flowable对比
- 技术对比
Activiti是领先的轻量级、以java为中心的开源BPMN引擎,支持真实世界的流程自动化需求。
官网:https://www.activiti.org/
开发手册:http://jeecg.com/activiti5.21/
流程数据存储:H2内存数据库(默认),数据库(工作中使用)
工作常用流程图展示:
创建一个新的XML文件(在任意项目上右击,选择New→Other→XML-XML File)并命名。确保该文件名以.bpmn20.xml或.bpmn结尾,因为只有这样,引擎才会在部署时选择这个文件。
流程部署部署(deploy)流程,可以使Activiti引擎可以识别它。部署意味着引擎会将BPMN 2.0 xml文件解析为可执行的东西,并为部署中包含的每个流程定义创建新的数据库记录。
流程启动向Activiti引擎部署流程定义后,可以用它启动流程实例。每个流程定义都可以有多个流程实例。流程定义就像是“蓝图”,而流程实例在运行时执行它。
节点任务完成流程启动后,用户任务,一般会提供“待办任务”列出所有需要该用户处理的任务。
Activiti通过complete完成任务,完成之后流程实例会继续向下一步进行。
暂停流程定义。当流程定义暂停后,不能再创建新的流程实例(会抛出异常)。
激活流程定义。可创建流程实例。
暂停流程实例。当流程实例暂停后,不能进行流程操作(例如完成任务会抛出异常),作业(如定时器)也不会执行。
激活流程定义。可进行流程操作。
流程执行至结束事件,并结束流程实例。这个流程实例与所有相关的运行时执行数据都会从数据库中移除。
Activiti流程元素 事件事件通常用于为流程生命周期中发生的事情建模,事件图形基本为圆圈。
定时器事件定时器事件,是由定义的定时器触发的事件。可以用于开始事件 start event,中间事件 intermediate event,或边界事件 boundary event。
错误事件BPMN错误事件是建模业务异常(business exceptions)的方式。
信号事件,信号是全局范围(广播)的事件,并会被传递给所有激活的流程实例(等待中的流程实例/捕获信号事件 catching signal events)。
消息事件消息事件,是指引用具名消息的事件。消息具有名字与载荷。与信号不同,消息事件只有一个接收者。
启动事件启动事件指明了流程的起点。启动事件的类型(流程在消息到达时启动,在指定的时间间隔后启动,等等),定义了流程如何启动,并显示为启动事件中的小图标。在XML中,类型由子元素声明来定义。
启动事件包括:空启动事件,定时器启动事件,消息启动事件,信号启动事件,错误启动事件
结束事件标志着(子)流程的(分支的)结束。结束事件总是抛出(型)事件。这意味着当流程执行到达结束事件时,会抛出一个结果。结果的类型由事件内部的黑色图标描绘。在XML表示中,类型由子元素声明给出。
结束事件包括:空结束事件,错误结束事件,终止结束事件,取消结束事件
边界事件是捕获(型)事件,依附在活动(activity)上(边界事件永远不会抛出)。这意味着当活动运行时,事件在监听特定类型的触发器。当事件捕获时,活动会被终止,并沿该事件的出口顺序流继续。
边界事件包括定时器边界事件,错误边界事件,信号边界事件,消息边界事件,取消边界事件,补偿边界事件
捕获中间事件包括:定时器捕获中间事件,信号捕获中间事件,消息捕获中间事件
抛出中间事件抛出中间事件包括:空抛出中间事件,信号抛出中间事件,补偿抛出中间事件
顺序流顺序流是流程中两个元素间的连接器。当流程执行中,一个元素被访问后,会沿着所有的出口顺序流继续。这意味着BPMN 2.0的默认性质是并行的:两个出口顺序流,会创建两个独立的,并行的执行路径。
顺序流包括:条件顺序流,默认顺序流
网关用于控制执行的流向(或者按BPMN 2.0描述的,执行的token 标志)。网关可以消耗与生成标志。
网关用其中带有图标的菱形表示。
网关包括:排他网关,并行网关,包容网关,基于事件的网关
“用户任务”用于建模需要人工执行的任务。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。
脚本任务脚本任务是自动化的活动。当流程执行到达脚本任务时,会执行相应的脚本。
Java服务任务Java服务任务用于执行外部的Java类。
Web服务任务Web服务任务用于同步调用外部的Web服务。
业务规则任务业务规则任务用于同步执行一条或多条规则。
邮件任务Activiti可以通过自动邮件服务任务,增强业务流程。可以向一个或多个收信人发送邮件,支持cc,bcc,HTML内容,等等。
Mule任务和Camel任务Mule任务可以向Mule发送消息,增强Activiti的集成特性。
Camel任务可以向Mule发送与接收消息,增强Activiti的集成特性。
手动任务定义了在BPMN引擎外部的任务。用于建模引擎不需要了解的某项工作,或者其他系统或用户界面。对于引擎来说,手动任务将按直接穿过活动处理,在流程执行到达时,自动继续流程。
JAVA接收任务接收任务,是等待特定消息到达的简单任务。
Shell任务Shell任务可以运行Shell脚本与命令。
执行监听器和任务监听器执行监听器可以在流程执行中发生特定的事件时,执行外部Java代码或计算表达式。
任务监听器用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。
如果一个活动要用于补偿另一个活动的影响,可以声明为补偿处理器。补偿处理器不在普通流程中,只在抛出补偿事件时才会执行。
多实例多实例活动是在业务流程中,为特定步骤定义重复的方式。在编程概念中,多实例匹配for each结构:可以为给定集合中的每一条目,顺序或并行地,执行特定步骤,甚至是整个子流程。
子流程子流程是包含其他的活动、网关、事件等的活动。其本身构成一个流程,并作为更大流程的一部分。子流程完全在父流程中定义(这就是为什么经常被称作嵌入式子流程)。
事件子流程事件子流程,是通过事件触发的子流程。可以在流程级别,或者任何子流程级别,添加事件子流程。
事务子流程事务子流程是一种嵌入式子流程,可用于将多个活动组织在一个事务里。事务是工作的逻辑单元,可以组织一组独立活动,使得它们可以一起成功或失败。
调用活动调用活动引用一个流程定义外部的流程,而子流程嵌入在原有流程定义内。
Activiti流程使用场景 任务发起人工发起申请,流程开始启动,像发起请假,报销流程。
任务审批用于流程中需要人工审核的场景,像请假,报销中的上级审批。
系统自动流程常用于一些后端不需要人工干预业务流程,像报销中校验报销类型,报销金额等。
多人任务审批一个审批节点需要多个人进行操作,有多种场景,多人中全部审批完成流程才能继续,多人中一部分人审批完成则流程继续。像流程中一个角色有多人的时候会使用。
任务退回将任务退回流程的指定节点,像流程中资料或信息异常被打回。
子流程业务比较复杂的节点,节点需要走额外的审批流程,
任务通知当任务达到某节点的时候发起通知,像流程中相关节点审批完成之后一般会发个通知给申请人说明流程流转到哪里。
Activiti7与flowable对比Activiti7和Flowable都是来自于一个叫JBPM的开源工作流,都是基于activiti低版本扩展和升级。
| Activiti7 | Flowable6 | |
|---|---|---|
| 流程引擎核心 | 基于activiti6.0,变动不大 | 基于activiti6.0,修复了比较多的bug |
| 功能对比 | 在工作流的外围(云化)功能整合,作出增强 | 在工作流的核心功能上,不断作出增强 |
| 社区活跃和文档 | 社区活跃,文档详细 | 社区活跃,文档详细 |
| Roadmap对比 | 主要着重云方向与外围(spring cloud)的整合 | 主要着重云方向与外围(spring cloud)的整合 |
| 开发上手难度 | 简单 | 简单 |



