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会出现异常。

相关文档

相关推荐
AskHarries2 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
isolusion3 小时前
Springboot的创建方式
java·spring boot·后端
zjw_rp3 小时前
Spring-AOP
java·后端·spring·spring-aop
TodoCoder3 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
凌虚4 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
机器之心5 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端
.生产的驴6 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
顽疲6 小时前
springboot vue 会员收银系统 含源码 开发流程
vue.js·spring boot·后端
机器之心6 小时前
AAAI 2025|时间序列演进也是种扩散过程?基于移动自回归的时序扩散预测模型
人工智能·后端
hanglove_lucky7 小时前
本地摄像头视频流在html中打开
前端·后端·html