Flowable流程引擎介绍

Flowable 是什么?

  • Flowable 是一个使用 Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。2016 年 10 月,Activiti 工作流引擎的主要开发者离开 Alfresco 公司并在 Activiti 分支基础上开启了 Flowable 开源项目。基于 Activiti v6 beta4 发布的第一个 Flowable release 版本为6.0。以 JAR 形式发布使得 Flowable 可以轻易加入任何Java环境:Java SE、Tomcat、Jetty 或 Spring 之类的 servlet 容器;JBoss 或 WebSphere 之类的 Java EE 服务器等等。 另外,也可以使用 Flowable REST API 进行 HTTP 调用。详情请见:flowable.com

Flowable 可以做什么?

  • 可以处理流程流转相关的业务,比如审批流、工作流等,可以处理复杂多变的业务场景,因为对于很明确的需求可以硬编码实现业务逻辑,但是对于未知的复杂多变的业务场景,就需要上业务流程引擎(business process engine, bpm)了,这样能根据实际业务流程建模,从而处理更加复杂的任务。
  • 不是全能选手。工作流引擎往往只是个辅助业务进行实现的东西,不要所有东西全部依赖工作流,需要结合业务本身,量体裁衣。
  • flowable的一些商业案例:flowable.com/casestudies...

Flowable包含的组件有哪些?

  • Flowable IDM: 身份管理应用。为所有Flowable UI应用提供单点登录认证功能,并且为拥有IDM管理员权限的用户提供了管理用户、组与权限的功能。

  • Flowable Modeler: 让具有建模权限的用户可以创建流程模型、表单、选择表与应用定义。

  • Flowable Task: 运行时任务应用。提供了启动流程实例、编辑任务表单、完成任务,以及查询流程实例与任务的功能。

  • Flowable Admin: 管理应用。让具有管理员权限的用户可以查询BPMN、DMN、Form及Content引擎,并提供了许多选项用于修改流程实例、任务、作业等。管理应用通过REST API连接至引擎,并与Flowable Task应用及Flowable REST应用一同部署。

  • API 服务:引擎API是与Flowable交互的最常用手段。总入口点是ProcessEngine。ProcessEngine可以使用多种方式创建。使用ProcessEngine,可以获得各种提供工作流/BPM方法的服务。ProcessEngine与服务对象都是线程安全的,因此可以在服务器中保存并共用同一个引用。

    名称 含义 说明
    ProcessEngine 流程引擎 流程设计、发布、任务的查询和操作等
    DmnEngine 决策引擎 各决策表的配置和使用等
    FormEngine 表单引擎 动态表单的设计和使用
    IdmEngine 身份引擎 提供用户和用户组还有权限的创建、修改、删除等
    ContentEngine 内容引擎 提供对Mybatis的封装,还提供了文件读取、文件保存的功能
  • Flowable整体是通过ProcessEngine来操作的。即不管什么框架操作流程,都需要通过ProcessEngine这个类来处理。ProcessEngine是Flowable对外公开的门面。UML类图如下: 关系图如下:

Flowable 数据库表类别

前缀 含义 说明
ACT_RE_* RE表示repository RepositoryService接口操作的表。如,流程定义,流程的资 源(图片,规则等)
ACT_RU_* RU表示runtime 运行时流程变量,用户任务,定时任务等,流程实例结束时将被删除
ACT_ID_* ID表示identity 存储如用户,用户组,权限等,flowable画图时,选择受理人或受理组就会查询这些表
ACT_HI_* HI表示history 历史的相关数据,如结束的流程实例,变量,任务等
ACT_GE_* GE表示general 普通数据,各种情况都使用的数据

通用数据表

表名 说明
ACT_GE_BYTEARRAY 通用的流程定义和流程资源
ACT_GE_PROPERTY 系统相关属性

流程定义表

表名 说明
ACT_RE_DEPLOYMENT 部署单元信息
ACT_RE_MODEL 模型信息,通过flowable-modler画图程序时才会产生该记录
ACT_RE_PROCDEF 已部署的流程定义

历史记录表

表名 说明
ACT_HI_PROCINST 历史的流程实例
ACT_HI_TASKINST 历史的任务实例
ACT_HI_ACTINST 历史的流转节点信息
ACT_HI_ATTACHMENT 历史的流程附件
ACT_HI_COMMENT 历史的说明性信息
ACT_HI_DETAIL 历史的流程运行中的细节信息
ACT_HI_IDENTITYLINK 历史的流程运行过程中用户关系
ACT_HI_VARINST 历史的流程运行中的变量信息

用户权限表

表名 说明
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 用户表

运行实例表

表名 说明
ACT_RU_TASK 运行时任务表
ACT_RU_EXECUTION 运行时流程执行实例
ACT_RU_VARIABLE 运行时变量表
ACT_RU_TIMER_JOB 定时作业表
ACT_RU_JOB 运行时作业表
ACT_RU_IDENTITYLINK 运行时用户关系信息,候选用户、候选组
ACT_RU_EVENT_SUBSCR 运行时事件
ACT_RU_DEADLETTER_JOB 正在运行的任务表
ACT_RU_HISTORY_JOB 历史作业表
ACT_RU_SUSPENDED_JOB 暂停作业表

其他表

本机如何体验flowable?

arduino 复制代码
docker run -p8080:8080 flowable/flowable-ui

运行成功后,在浏览器输入http://localhost:8080/flowable-ui 默认账号密码(admin/test)

我们系统是如何来使用flowable的能力的?

  • 考虑到我们的工作流可能有跨租户的需求或者对外提供能力(当时的需求概况),所以把flowable脱离出多租户体系,单库应用。worflow是flowable和业务方之间的中间人(月老),牵线搭桥,促成良缘。简单关系如下(避免出现三角恋):

  • flowable的工程搭建(比较简单)

    • spring-boot 集成,直接选择 flowable-spring-boot-starter,里面提供了齐全的 REST API。引入方式很简单,pom中增加依赖如下:
    java 复制代码
    <!-- Flowable spring-boot 版套餐 --> 
    <dependency> 
        <groupId>org.flowable</groupId> 
        <artifactId>flowable-spring-boot-starter</artifactId> 
        <version>6.4.1</version> 
    </dependency>
  • 也可以直接选择 flowable-engine

    java 复制代码
    <dependency> 
        <groupId>org.flowable</groupId> 
        <artifactId>flowable-engine</artifactId> 
        <version>6.4.1</version> 
    </dependency>
  • 初始化配置

    java 复制代码
    // 流程引擎配置 
    ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration() 
        .setDataSource(dataSource) 
        // 初始化基础表,不需要的可以改为 ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE 
        .setDatabaseSchemaUpdate(ProcessEngineConfiguration. DB_SCHEMA_UPDATE_TRUE) 
        // 设置发件人用户名 
        .setMailServerUsername("管理员") 
        // 解决流程图乱码 
        .setActivityFontName("宋体") 
        .setLabelFontName("宋体") 
        .setAsyncExecutorActivate(true) 
        .setAnnotationFontName("宋体"); 
    // 初始化流程引擎对象 
    log.info("=============================ProcessEngine初始化完成============================="); 
    return cfg.buildProcessEngine();
  • 我们主要是使用的是BPMN Engine的能力,需要自己来抽象流程,可以通过本地启动modeler服务设计流程(生成的是一个xml文件),并发布到flowable引擎中,modeler的设计界面如下:

  • flowable可以集成modeler的UI设计界面(目前我们没集成),后续有兴趣的同学可以一起参与哈。

  • 业务流引擎重点是把业务流程抽象出来,通过modeler来画出来,发布到引擎中,每个人对业务流程的抽象都不一样,只要结果一样,流程图可以不一样的。

  • 具体怎么画流程,给大家稍微演示一遍。

我们踩过哪些坑?

  • 我们在测试环境利用flowable自动创建表结构来生成的相关表,预发的时候就直接用的测试环境的DDL脚本来执行(没利用程序再自动生成),结果发现很多表没有创建。经过检查发现因为数据库编码不一致会导致的。我们测试环境的数据库小版本和预发数据库的小版本不一致(创建数据库时候的编码不一样),后让运维修改编码完成。
  • 因为flowable在数据库版本管控上使用的是Liquibase进行管控。所以在自动创建完flowable的数据库之后。一定要将ProcessEngineConfiguration的database-schema-update改成false。不然当不同的人更改了flowable的版本,会自动更新表结构。会导致问题。
  • 中国式的前加签、后加签功能,flowable本身不支持,无法在引擎层面支持,最后在workflow对接层做了改造,以满足前后加签的功能需求。
  • 所有节点的ID不能是数字。Flowable在定义的节点中不能是数字作为节点的Id。数字作为节点的ID会出现异常。

相关文档

相关推荐
Pandaconda19 分钟前
【Golang 面试题】每日 3 题(三十九)
开发语言·经验分享·笔记·后端·面试·golang·go
编程小筑1 小时前
R语言的编程范式
开发语言·后端·golang
技术的探险家1 小时前
Elixir语言的文件操作
开发语言·后端·golang
ss2731 小时前
【2025小年源码免费送】
前端·后端
Ai 编码助手1 小时前
Golang 中强大的重试机制,解决瞬态错误
开发语言·后端·golang
齐雅彤2 小时前
Lisp语言的区块链
开发语言·后端·golang
齐雅彤2 小时前
Lisp语言的循环实现
开发语言·后端·golang
梁雨珈2 小时前
Lisp语言的物联网
开发语言·后端·golang
邓熙榆3 小时前
Logo语言的网络编程
开发语言·后端·golang
羊小猪~~7 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研