Flowable工作流入门看这篇就够了

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Flowable工作流入门看这篇就够了

 入行几年的程序员们, 多少都对工作流有所了解。Java语言支持的工作流有很多选择, 最早的JBPM, 到现在比较出名的Activiti, Camunda, Flowable等等, 都是比较常见的开源产品。

   各家公司除了自己造轮子之外, 选择开源产品进行个性化开发, 是大部分中小团队最好的选择, 今天介绍一下Flowable, 解决如何下手的问题。

   Flowable使用 Apache V2 license 协议开源, 支持 BPMN 2.0 行业标准。

   让我们一起花三十分钟, 了解Flowable的安装, 建表, 设计器, API等常见问题。


0. 安装须知

本文基于Spring Boot集成方式进行介绍

官方网址https://www.flowable.com/

Github:https://github.com/flowable/

开源协议Apache-2.0

基础软件及版本

  • Java 8
  • Spring Boot 2.5
  • Mysql 8.0
  • Flowable 6.7.0

1. Maven

创建Spring Boot 项目, pom加入依赖

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>6.7.0</version>
</dependency>

1.1 建表

1.1.1 MySQL

由于需要支持TIMESTAMP (6) 类型, 因此5.6.4及以下版本无法使用

5.7或8.0安装成功

两种初始化建表方式:sql脚本,或是boot自动。

sql方式请参考1.1.2

按以下方法启动Spring Boot项目,可自动建表

建表时, 连接串需要&nullCatalogMeansCurrent=true

spring:
  datasource:
    url: jdbc:mysql://192.168.1.123:3306/flowable?useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
    username: root
    password: pass
    driverClassName: com.mysql.cj.jdbc.Driver

建表后可关闭, 下次启动不会再次建表

flowable:
  database-schema-update: false

默认会启动liquibase, 可关闭

spring:
  liquibase:
    enabled: false

1.1.2 Oracle 等其他数据库

据多个朋友反馈,Oracle建库可能出现建表语句不全的问题,推荐大家从github下载发布包,执行内部的建表语句,包括mysql也可以采用这种方式。

下载地址:https://github.com/flowable/flowable-engine/releases/tag/flowable-6.7.0

下载后,执行里面的database脚本即可。

初次使用,可以选择create - all的脚本执行。

常用的db2、mssql、mysql、oracle、postgresql都有,还有一个奇怪的h2混了进来

h2是演示版系统默认的库,但我没实际用过。

1.1.3 国产数据库

默认情况下不支持国产脚本,经测试达梦可以成功使用,需要人工按照Oracle的库表调整。

2. 设计器

各大开源流程工具都遵从BPM标准, 一般流程设计都是以BPM格式的XML文件进行定义。但我们不可能去手写配置文件, 一般都借助于可视化设计器。

官方给的Web设计器大致分两个版本, 需要自行部署到Tomcat运行, 并且需要连接到前面建的数据库。



2.1 Flowable 6.5版本以前的

6.5版本的方法仅供参考, 本文使用2.2的设计器

官网下载设计器, 然后部署到tomcat, 包括

  • flowable-admin
  • flowable-idm
  • flowable-modeler
  • flowable-rest
  • flowable-task

启动tomcat, 流程设计器访问 http://localhost:8080/flowable-modeler

默认login/password: admin/test

自带H2数据库, 可修改flowable-default.properties更改数据源, 文件在各个模块的/WEB-INF/classes/下面

2.2 Flowable 6.6版本以后的

推荐使用

官网下载, 只有2个包

  • flowable-rest
  • flowable-ui

访问地址:

http://localhost:8080/flowable-rest/docs/ (login/password: rest-admin/test)

http://localhost:8080/flowable-ui (login/password: admin/test)

修改数据源:

打开/WEB-INF/classes/flowable-default.properties, 搜索spring.datasource相关配置, 改为步骤1中的数据库地址即可。

2.3 Eclipse设计器插件

Eclipse设计器属于离线设计器, 无需连库, 成果以xml文件方式保存, 可以通过发布程序发送至流程引擎。


安装步骤:

  1. help - install new software
  2. add网址 name: flowable bpmn designer, location: http://www.flowable.org/designer/update/ , 点击add
  3. 选中flowable eclipse bpmn 2.0 designer, 点next, next, I accept, finish, install anyway
  4. restart
  5. 新建flowable project
  6. 在diagrams下面, 新建流程图即可

2.4 设计器说明

2.4.1 启动事件

流程的起点, 必须且仅有1个。

可配置开始表单, 启动时要求发起人立即填写一些内容。

也可以留空, 仅作为默认起点。

2.4.2 结束事件

流程的重点, 必须有1个或多个, 可以有正常结束/异常结束等等

2.4.3 用户任务

需要用户参与的任务节点, 最常见的节点。

存在四种情况:

  1. assignee 确定处理人, 记录处理人id
  2. assignee 变量处理人, 设计时记为 ${userid} 形式, 通过传参确定处理人
  3. candidateUser 候选人形式, 记录多个候选人id, 由候选人进行抢占claim接收任务
  4. candidateGroup 候选组(角色)形式, 记录多个候选组id, 由候选组内的人进行抢占claim接收任务

2.4.4 服务任务

不等待节点。执行实例走到服务任务节点之后会继续往下流转。

2.4.5 脚本任务

不等待节点。脚本类型有javascript、groovy、juel

2.4.6 排他网关

根据变量值的条件判断, 决定后续路径

用条件表达式也能实现同等功能

按XML中定义的顺序, 执行第一个满足条件的路径。如果都不符合则会报错

2.4.7 并行网关

具有分支和汇聚节点, 不解析条件, 多个路径同时并行

在Flowable中, 如果流程是多路并行的, 可以在任务上设置为并行任务, 以替代传统工作流的多个相同任务的并行行为。

2.4.8 包容网关

解析条件, 并执行所有符合条件的路径

3. 表说明

自动生成的表中, 有很多是支持流程设计器的表, 真正流程运行所需的表并没有那么多。

如果用过Activity的同学, 就会发现表名很多相同的, 但Flowable的表多了很多, 毕竟两者早期是同一个产品。

表的功能一般可以通过第二个词语缩写来进行区分。

3.1 ACT_RE_*

’RE’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。

3.2 ACT_RU_*

’RU’表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。

3.3 ACT_ID_*

’ID’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。

一般在正式系统中, 会将这些表用业务系统的组织机构, 角色表进行替换。

3.4 ACT_HI_*

’HI’表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。

3.5 ACT_GE_*

普通数据,各种情况都使用的数据。

4. 自定义表单

内置自定义表单功能, 可以实现一些简单的表单定义, 但真正业务开展时, 很难对复杂多变的情况进行支撑, 不建议使用。

大家如果要在开发的系统中, 对Flowable进行改造开发, 表单设计将是其中最复杂的部分。以后有时间单独写一篇文章进行介绍

5. 流程版本

流程定义文件是xml格式, 交由流程引擎的ProcessDefinition服务进行发布。

ProcessDefinition每次发布时, 会根据key进行版本控制, 按数值顺序1,2,3递增

启动流程时, 根据key启动, 则会自动选择版本最高的, 产生流程实例

6. API

引擎API是与Flowable交互的最常用手段。总入口点是ProcessEngine。

在Spring Boot项目中, 这些对象都会被Spring容器管理, 可以直接引用

public class MyTestController {
  @Autowired
  private ProcessEngine processEngine;
  @Autowired
  private RepositoryService repositoryService;
}

6.1 ProcessEngines

流程引擎的引用, 单例唯一, 可以通过它获得所有api的服务对象

6.2 RepositoryService

管理与控制部署(deployments)与流程定义(process definitions)的操作

  • 部署上传定义文件xml至引擎, 部署包中的所有流程都可以启动。
  • 查询引擎现有的部署与流程定义。
  • 暂停或激活部署中的某些流程,或整个部署。
  • 获取各种资源,比如部署中保存的文件,或者引擎自动生成的流程图。
  • 获取POJO版本的流程定义。它可以用Java而不是XML的方式查看流程。

6.3 TaskService

人类用户参与操作的任务, 即我们开发的软件中"我的待办任务"等内容.

  • 查询分派给用户或组的任务
  • 创建独立运行(standalone)任务。这是一种没有关联到流程实例的任务。
  • 决定任务的执行用户(assignee),或者将用户通过某种方式与任务关联。
  • 认领(claim)任务。认领是指某人决定成为任务的执行用户,也即他将会完成这个任务。
  • 完成(complete)任务是指“做这个任务要求的工作”,通常是填写某个表单。

6.4 IdentityService

  • 用于管理(创建,更新,删除,查询……)组与用户。
  • 在运行时, 系统并不做任何用户检查, 即用户表中可能不存在该用户。

6.5 FormService

是可选服务。提供简单的表单功能

  • 引入了开始表单(start form)与任务表单(task form)的概念。
  • 开始表单是在流程实例启动前显示的表单,而任务表单是用户完成任务时显示的表单。

6.6 HistoryService

查询Flowable引擎收集的所有历史数据。

运行期的数据会同步至历史数据表, 因此运行期的数据表始终保持在一个比较低的数据量, 而历史表则越来越大

  • 流程实例启动时间
  • 谁在执行哪个任务
  • 完成任务花费的事件
  • 每个流程实例的执行路径

6.7 ManagementService

通常在用Flowable编写用户应用时不需要使用。它可以读取数据库表与表原始数据的信息,也提供了对作业(job)的查询与管理操作。

使用作业,包括定时器(timer),异步操作(asynchronous continuation),延时暂停/激活(delayed suspension/activation)等等

6.8 DynamicBpmnService

可用于修改流程定义中的部分内容,而不需要重新部署它。例如可以修改流程定义中一个用户任务的办理人设置,或者修改一个服务任务中的类名。

7. 设计器整合

在开发自己的系统时, 整合工作流, 我们往往需要程序里提供一个菜单, 实现流程的可视化配置, 拖拽, 保存, 版本管理等工作, 利用官方的设计器, 我们可以快速构造一个独立的Spring Boot工程, 提供设计器界面, 通过Url集成的方式加入我们的项目当中。

方法: 对flowable-ui-common进行部分改造

步骤:

1.创建boot项目

2.增加依赖包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-engine</artifactId>
    <version>6.7.0</version>
</dependency>
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-ui-common</artifactId>
    <version>6.7.0</version>
</dependency>
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter-ui-modeler</artifactId>
    <version>6.7.0</version>
</dependency>
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter-ui-idm</artifactId>
    <version>6.7.0</version>
</dependency>

3.如果要去掉登录, 则可以对以下文件的当前用户权限相关信息加以干涉, 设置默认值或是屏蔽。

org.flowable.ui.common.rest.idm.remote.RemoteAccountResource
org.flowable.ui.common.security.SecurityUtils
org.flowable.ui.modeler.conf.ModelerSecurityConfiguration

并重写模型设计器的保存和查询方法, 解决写入创建人的问题。

org.flowable.ui.modeler.rest.app.ModelResource
org.flowable.ui.modeler.rest.app.ModelsResource

启动之后就能看到设计器界面了

8. 汉化

使用中, 会遇到设计器汉化不完整的情况, 可以在改造项目中, 自行创建目录 resource/static/modeler/i18n/zh-CN.json , 进行汉化

官方的汉化很多词语都直接是英文, 或者翻译不当, 因此一般是自己进行汉化补充, 需要汉化文件的可以与我联系。

以上就是对Flowable工作流的简单介绍, 希望大家能顺利使用。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
7302 1
|
数据可视化 前端开发 Java
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)(一)
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)
4136 0
|
存储 XML 数据库
Flowable 完整表结构说明(一)
Flowable 完整表结构说明
2812 0
|
缓存 JavaScript Cloud Native
阿里云发布 Spring Boot 新脚手架,真香
本文,围绕 spring initializr 框架,以 start.spring.io 为例,全面的给大家介绍如何使用和扩展这个框架,以及背后的运行原理。
58117 1
阿里云发布 Spring Boot 新脚手架,真香
|
11月前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
2188 1
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
11月前
|
XML 前端开发 Java
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
1588 0
SpringBoot整合Flowable【04】-  通过代码控制流程流转
|
11月前
|
存储 Java API
SpringBoot整合Flowable【02】- 整合初体验
本文介绍了如何基于Flowable 6.8.1版本搭建工作流项目。首先,根据JDK和Spring Boot版本选择合适的Flowable版本(7.0以下)。接着,通过创建Spring Boot项目并配置依赖,包括Flowable核心依赖、数据库连接等。然后,建立数据库并配置数据源,确保Flowable能自动生成所需的表结构。最后,启动项目测试,确认Flowable成功创建了79张表。文中还简要介绍了这些表的分类和常用表的作用,帮助初学者理解Flowable的工作原理。
2089 0
SpringBoot整合Flowable【02】- 整合初体验
|
11月前
|
Java 开发者
SpringBoot整合Flowable【01】- 初识工作流引擎
本文介绍了工作流的基本概念,重点讲解了BPM(业务流程管理)和BPMN 2.0(业务流程建模符号)的关系,以及工作流引擎的发展。BPM是一种管理思想,BPMN是实现该思想的工具。文中还介绍了Flowable、Activiti等主流工作流引擎,并详细说明了流程设计的五种方式,包括FlowableUI、BPMN.js自定义、第三方设计器和代码实现等。最后通过一个请假流程图解释了流程图的组成元素,如事件、连线、任务和网关,帮助读者更好地理解工作流的设计与实现。
895 3
SpringBoot整合Flowable【01】- 初识工作流引擎
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
53533 11

热门文章

最新文章