AI 助理
备案 控制台
开发者社区 开发与运维 文章 正文

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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
推荐场景:
学生管理系统数据库设计 搭建个人博客
云数据库 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工作流的简单介绍, 希望大家能顺利使用。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
灬沙师弟
目录
相关文章
好奇的菜鸟
|
4月前
|
Java Maven
Flowable初体验
Flowable初体验
好奇的菜鸟
69 1
Freedom123
|
5月前
|
机器学习/深度学习 自然语言处理 数据挖掘
【LangChain系列】第七篇:工作流(链)简介及实践
【5月更文挑战第21天】LangChain是一个框架,利用“链”的概念将复杂的任务分解为可管理的部分,便于构建智能应用。数据科学家可以通过组合不同组件来处理和分析非结构化数据。示例中展示了如何使用LLMChain结合OpenAI的GPT-3.5-turbo模型,创建提示模板以生成公司名称和描述。顺序链(SimpleSequentialChain和SequentialChain)则允许按顺序执行多个步骤,处理多个输入和输出
Freedom123
836 1
朱季谦
|
SQL Java 关系型数据库
Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0
Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0
朱季谦
195 0
-编程工程师-
|
XML 存储 供应链
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(1)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
-编程工程师-
285 0
-编程工程师-
|
XML Java 数据库连接
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(4)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
-编程工程师-
229 0
-编程工程师-
|
XML 前端开发 数据可视化
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(3)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
-编程工程师-
637 0
-编程工程师-
|
Oracle Java 关系型数据库
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(2)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
-编程工程师-
462 0
-编程工程师-
|
XML 存储 架构师
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(一)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(一)
-编程工程师-
2330 0
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(一)
-编程工程师-
|
XML 数据可视化 Java
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(三)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(三)
-编程工程师-
1142 0
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(三)
-编程工程师-
|
Oracle 网络协议 Java
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(二)
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(二)
-编程工程师-
571 0
史上最全的工作流引擎 Activiti 学习教程(值得收藏)(二)

热门文章

最新文章

  • 1
    TensorFlow中的那些高级API
  • 2
    安装Zabbix过程中出现的问题集
  • 3
    分布式1024节点!1天玩转PolarDB-X超大规模集群
  • 4
    阿里云郑晓:浅谈GPU虚拟化技术(第三章)
  • 5
    linux more命令: 按页阅读文件
  • 6
    AT&T的malloc实现--malloc的基础和本质
  • 7
    对pgpoo-II的pool_process_context的 proc_id 的理解
  • 8
    Palo Alto Networks CEO:合作伙伴正在淡化对传统安全厂商的关注
  • 9
    Extjs 项目中常用的小技巧,也许你用得着(5)--设置 Ext.data.Store 传参的请求方式
  • 10
    UIWebView和UIWebViewDelegate的基本用法
  • 1
    【题解】—— LeetCode一周小结42
    35
  • 2
    Kotlin - 面向对象之抽象类与接口
    25
  • 3
    Kotlin - 参数与异常
    24
  • 4
    Kotlin - 分支与循环
    24
  • 5
    Kotlin14 - 类成员
    28
  • 6
    Kotlin13 - 函数与Lambda表达式
    11
  • 7
    Kotlin12 - 分支与循环
    10
  • 8
    Kotlin - 常量与变量
    9
  • 9
    Kotlin10 - 面向对象之抽象类与接口
    10
  • 10
    Kotlin9- 参数与异常
    9
  • 相关课程

    更多
  • ROS入门实践
  • C++ 入门教程开发文档
  • 开源 Flink 极速上手教程
  • Oozie知识精讲与实战演练
  • 阿里云RPA(机器人流程自动化)- 初级入门(可视化)
  • SpringBoot实战教程
  • 相关电子书

    更多
  • Storm源码走读笔记
  • 如何创建一个成功的(在业务和开发中)开源项目
  • 蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程
  • 相关实验场景

    更多
  • 语言入门-1:环境构建
  • 星轨SOP编排中心实战课程
  • 实验手册指导文档
  • 下一篇
    阿里云无影云电脑免费试用,最长可试用3个月

    玻璃钢生产厂家商场美陈布置怎么算价格郑州特色玻璃钢雕塑订做价格沈阳玻璃钢香蕉雕塑山西玻璃钢雕塑清洗安徽户内玻璃钢雕塑供应商广东正友玻璃钢花盆三明模压法玻璃钢雕塑报价海沧玻璃钢雕塑开县玻璃钢牌匾雕塑安庆玻璃钢圆门头雕塑铸铜雕塑玻璃钢图片金华玻璃钢人物雕塑价格如何玻璃钢雕塑常见造型上海玻璃钢动物雕塑价格学校玻璃钢雕塑销售玻璃钢果篮雕塑公司商场美陈看什么方面的书玻璃钢雕塑模具招聘玻璃钢红军雕塑哪里靠谱江西动物玻璃钢雕塑厂家玻璃钢小乔周瑜雕塑天水彩色玻璃钢雕塑常德长沙玻璃钢雕塑定制制作玻璃钢超人雕塑玻璃钢仿铜人物雕塑的用途范围几何长颈鹿玻璃钢雕塑大摆件黄山玻璃钢雕塑多少钱武汉玻璃钢树脂雕塑厂家广东玻璃钢马雕塑艺术摆件上海家用玻璃钢雕塑摆件香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化