工作流引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据
flowable使用
文档地址
http://doc.miguren.cn/bpmn/#_introduction
flowable-ui
flowable 默认使用内存数据库(h2数据库)。
war包运行
https://github.com/flowable/flowable-engine/releases/download/flowable-6.4.2/flowable-6.4.2.zip
镜像运行
flowable-ui 具有完整的功能。访问地址:http://127.0.0.1:8080/flowable-ui/idm/#/login。
docker run -d -p8080:8080 flowable/flowable-ui账号:admin密码:test
flowable-rest 只提供了api的功能。
docker run -p8080:8080 flowable/flowable-rest账号:rest-admin密码:test
项目集成
流程模型的用处是什么???
一次流程部署可能会涉及到多个流程定义文件,因此流程定义表中存了流程部署的id。
怎么获取流程id?
怎么获取流程当前的执行id?
怎么判断流程已经结束?=> 在历史流程当中是否能查找到这个流程id。
flowable-api 接口服务。
flowable-ui集成。
流程定义 使用流程设计器。流程定义需要遵循bpmn2.0规范,最终就是形成一个xml文件。
流程定义文件包含俩部分,一个是流程定义部分,一个是可视化部分。
SpringProcessEngineConfiguration,含有Spring容器的任务。
数据库的sql文件放在flowable-engine-common-6.4.2.jar中,目录为 org/flowable/common/db/
流程引擎配置
ProcessEngineConfiguration
流程引擎配置,可以使用xml文件配置,也可以使用javabean的方式配置。
StandaloneProcessEngineConfiguration,单独运行
SpringProcessEngineConfiguration,spring环境
JtaProcessEngineConfiguration,JTA事务
databaseSchemaUpdate
update,true,不存在的时候就更新。
update,false,不存在的时候就报错。
create-drop,引擎创建时创建表结构,并在引擎关闭时删除表结构。

概念
流程引擎
ProcessEngine,流程引擎会将流程定义存储在数据库中。流程定义的id是64位大小,key就是xml文件的id。
流程定义
ProcessDefinition,一般是xml文件。xml文件包含可视化部分(图形部分)和流程定义元素部分。一个流程定义文件可以包含多个流程定义(process信息)。流程定义中可以包含流程变量。需要遵循bmpn2.0规范(展现流程的注记方法)。流程文件最终需要转换成bpmnModel(也就是java对象)。
流程实例
流程定义启动之后就变成了流程实例。
流程变量
流程定义:
- 事件:
- 按触发的位置分类
- 开始事件(start event),是流程的起点。
- 定时启动事件
- 结束事件(end event)。
- 中间事件,单独作为流程节点的事件。
- 边界事件,附属于某个流程节点的事件。
- 开始事件(start event),是流程的起点。
- 按触发的类型分类
- 捕获事件,一直等待,直到被触发。
- 开始事件都是捕获事件,
- 信号事件(广播信号)
- 消息事件
- 抛出事件,自动触发,并返回结果。
- 捕获事件,一直等待,直到被触发。
- 按触发的位置分类
- 任务类型:系统任务 和 用户任务。任务的执行是原子性的,只会从上一个等待任务到达下一个等待任务。
- 用户任务(userTask),流程中人类用户操作的步骤。用户任务可以跟角色关联起来。
- 系统任务,自动执行的步骤。
- 脚本任务(script task)
- java服务任务 (service task),实现JavaDelegate接口的任务
- java接收任务(receive task),实现Java
- 网关,可以选择流程的走向。
- 排他网关(exclusive gateway),从可选路径中只能选择一条。
- 包容网关(inclusive gateway),计算条件。
- 并行网关(parallel gateway),不计算条件。
- 事件网关(event-based gateway),必须要有俩条执行路径,比如一条路径等待信号,另外一条路径开启定时器,在指定的事件后执行。
- 流:定义流程的走向。
- 顺序流(sequence flow)
- 条件顺序流(conditional flow)
- 默认顺序流(defaullt sequence flow)
- 流程变量:流程变量是用户任务中输入的变量,网关可以根据这个流程变量选择不同的顺序流走向。
- 使用el表达式,${}。
- 事务(事务的执行必须是原子性的)
- 同步延续
- 异步延续
- 数据对象(自定义的数据结构)
- 自定义扩展
- flowable:命名空间的前缀,表示是flowable扩展的元素。
事件的介绍,
启动事件 指明事件发起人,flowable:initiator=”initiator” => 好像也可以设置认证人authenticate user。
流程实例可以通过id启动,也可以通过key启动。流程实例跟流程实例的主执行流实际上是同一条记录。
CandidateUsers,CandidateGroups 和 Assignee,Candidate 需要申领,Assignee为受理人。也就是一种是指派,另外一种是认领。
带有flowable: 前缀的表示自定义扩展。
execution执行,就是当前指针,执行流。
流程变量分为全局变量和局部变量,getVaribaleLocal只能获取局部变量的值,而getVariable可以获取局部变量的值,也可以获取全局变量的值。局部变量的值,在对应的任务执行节点执行完之后,就不能在获取到。
receive Task => trigger task。接收任务用左上角有一个消息图标
userTask => complete
signalEventReceived,messageEventReceived,
skip expression,设置为true的时候,任务才能自动完成。
delegationState,委托状态。pedding 等待解决 和 resolved 解决委托任务。 委托任务,任务还是挂在委托人的身上。
turnTask,转办任务,改变任务的受理人。
assignee,任务的受理人。
owner,任务的委托人。
审核不通过,功能怎么没有的???
子流程(subProcess)。
子任务(subTask)。
用户组和用户管理
可以使用NativeSql进行源生数据的查询。
终止执行流,将所有的执行流全部移到结束节点。
怎么还有一个汇签的功能???
异步执行器和定时任务
<property name="asyncExecutorActivate" value="true" /><property name="history" value="audit" />
避免每次都读取数据库,会设置流程定义缓存processDefinitionCacheLimit,使用了LRU算法。
日志怎么实现动态绑定?
事件处理器:
FlowableEventListener ,事件监听器。BaseEntityEventListener
isFailOnException,是否需要忽略事务监听器执行时的代码异常。
typedEventListeners,eventListeners。类型监听器,只监听对应类型的事件。
事件监听的顺序,普通监听器按照在list里面的定义执行,然后再是某类型的事件。
工作流结束的时候,运行时的数据都会清空,只会在历史数据中存在。
全局事件监听器,FlowableEventDispatcher ,设置 FlowableEventListener。
flowable-api
RepositoryService
将流程定义部署到流程引擎当中。存储的是静态的数据。
查询引擎现有的部署与流程定义。
暂停或激活部署中的某些流程
获取各种资源,比如说流程图。
删除部署资源,如果不进行级联删除的话,如果部署的流程定义被流程实例引用,则将会删除出错。
RuntimeService
部署了之后,就需要使用RuntimeService服务来进行启动。可以将参数放入到流程启动的时候,也就是启动参数。存储的是动态的数据。
可以添加事件监听器 和 移除事件监听器。可以分发事件。
改变当前流程实例的运行状态(启动,终端,停止流程)。
TaskService
用户任务,根据条件查询有哪些任务。也可以查看跟当前任务关联的流程变量。
创建独立运行任务。
决定任务的执行用户。
添加任务监听器(taskListener)
认领任务(claim task)。使用候选组,候选人的方式需要认领任务。
完成任务(complete task)。
javaDelegate,java委托
dataObject,在xml文件中自动映射为流程变量。
IdentityService
用于管理组和用户
setAuthenticatedUserId,设置启动人的事件。
FormService
表单服务,是一个可选服务。开始表单是流程实例启动前显示的表单,而任务表单是完成任务时显示的表单。
HistoryService
查看所有流程实例的审计数据和历史数据。
ManagementService
管理服务。
DynamicBpmnService
表定义
- ACTRE* :’ RE ’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
- ACTRU* :’ RU ’表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
- ACTID* : ’ ID ’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。
- ACTHI* : ’ HI ’表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。
- ACTGE* : 普通数据,各种情况都使用的数据。
| 表分类 | 表名 | 表说明 |
|---|---|---|
| 一般数据(2) | ACT_GE_BYTEARRAY | 通用的流程定义(如图片)和流程资源 |
| ACT_GE_PROPERTY | 系统相关通用属性,键值对 | |
| 流程历史记录(8) | ACT_HI_ACTINST | 历史的流程实例 |
| ACT_HI_ATTACHMENT | 历史的流程附件 | |
| ACT_HI_COMMENT | 历史的说明性信息 | |
| ACT_HI_DETAIL | 历史的流程运行中的细节信息 | |
| ACT_HI_IDENTITYLINK | 历史的流程运行过程中用户关系 | |
| ACT_HI_PROCINST | 历史的流程实例 | |
| ACT_HI_TASKINST | 历史的任务实例 | |
| ACT_HI_VARINST | 历史的流程运行中的变量信息 | |
| 用户用户组表(9) | ACT_ID_BYTEARRAY | 二进制数据表 |
| ACT_ID_GROUP | 用户组信息表 | |
| ACT_ID_INFO | 用户信息详情表 | |
| ACT_ID_MEMBERSHIP | 人与组关系表 | |
| ACT_ID_PRIV | 权限表 | |
| ACT_ID_PRIV_MAPPING | 用户或组权限关系表 | |
| ACT_ID_PROPERTY | 属性表 | |
| ACT_ID_TOKEN | 系统登录日志表 | |
| ACT_ID_USER | 用户表 | |
| 流程定义表(3) | ACT_RE_DEPLOYMENT | 部署单元信息 |
| ACT_RE_MODEL | 模型设计器设计的模型信息 | |
| ACT_RE_PROCDEF | 已部署的流程定义 | |
| 运行实例表(10) | ACT_RU_DEADLETTER_JOB | 正在运行的任务表 |
| ACT_RU_EVENT_SUBSCR | 运行时事件 | |
| ACT_RU_EXECUTION | 运行时流程执行实例 | |
| ACT_RU_HISTORY_JOB | 历史作业表 | |
| ACT_RU_IDENTITYLINK | 运行时用户关系信息 | |
| ACT_RU_JOB | 运行时作业表 | |
| ACT_RU_SUSPENDED_JOB | 暂停作业表 | |
| ACT_RU_TASK | 运行时任务表 | |
| ACT_RU_TIMER_JOB | 定时作业表 | |
| ACT_RU_VARIABLE | 运行时变量表 | |
| 其他表(2) | ACT_EVT_LOG | 事件日志表 |
| ACT_PROCDEF_INFO | 流程定义信息 |
springboot集成flowable-modeler
代码下载:
https://github.com/gitonlie/flowable-ui.git
导入配置
@Import(value={
// 引入修改的配置
ApplicationConfiguration.class,
AppDispatcherServletConfiguration.class,
SecurityUtils.class})
mybatis配置
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
mapper-locations: classpath*:mapper/**/*Mapper.xml,classpath*:/META-INF/modeler-mybatis-mappings/*.xml
type-aliases-package: com.ourway.its.**.entity
typeEnumsPackage: com.ourway.its.**.enums # 支持统配符 * 或者 ; 分割
global-config:
id-type: ASSIGN_ID
capital-mode: true
db-config:
logic-delete-field: deleted #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
configuration-properties:
prefix:
blobType: BLOB
boolValue: TRUE
