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

2023-01-26 14:51:08 浏览数 (1)

    入行几年的程序员们, 多少都对工作流有所了解。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加入依赖

代码语言:javascript复制
<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

代码语言:javascript复制
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

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

代码语言:javascript复制
flowable:
  database-schema-update: false

默认会启动liquibase, 可关闭

代码语言:javascript复制
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容器管理, 可以直接引用

代码语言:javascript复制
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)任务是指“做这个任务要求的工作”,通常是填写某个表单。

以上就是对Flowable工作流的简单介绍, 所有教程将整理在公主号thisjava中,希望大家能顺利使用。

0 人点赞