SpringBoot整合Flowable【01】- 初识工作流引擎

一、认识工作流

1.认识BPM与BPMN

如果我们翻阅Flowable的文档,可以看到对于它会有一段这样的描述-"可用于部署BPMN2.0流程定义",那么BPMN2.0又是个什么东东呢?下面我们简单介绍一下。

要知道BPMN2.0是什么,我们需要先了解下BPM(Business Process Management,业务流程管理)。它说白了就是一种管理方法,或者说是一种思想,主要是用来管理业务流程,我们如今的很多涉及到业务关系和流程的系统都可以称为BPM系统,比如你一定在大学期间做过的图书管理系统当然也属于这一类。

针对复杂的问题,我们通常的解决方法是对其进行模型化的抽象,通过模型来推导解决问题,也就是建模(这一过程也被称之为Business Process Modeling业务流程建模)。BPM下就有很多种建模语言,BPMN(Business Process Modeling Notation)就是其中的一种建模语言。

在BPMN发展的过程中,基于BPMN的一些特性与业务流程管理中常见的一些情况,总结提炼出了一套标准。这套标准或者也可称之为规范,在2004年5月由BPMI Notation Working Group对外发布,这就是BPMN 1.0 规范。后来BPMI并入到OMG组织,并在2011年推出BPMN2.0标准,对BPMN进行了重新定义 (Business Process Model and Notation),这就是我们常说的BPMN2.0。

总的来说,BPM是一种管理思想,而BPMN是实现这种思想的一种工具,它们之间的关系就像是方法论与方法的关系。BPMN作为一种建模语言,可以帮助我们更好地理解和实现BPM的目标。

2.工作流引擎的发展

工作流引擎则可用于部署BPMN 2.0流程定义,创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据。而基于BPMN2.0标准也产生了很多工作流引擎,例如Activiti 、Flowable 、jBPM等。

Flowable功能最全面,Camunda最轻,我的这次系列教程打算使用的是Flowable。

通过这个流程图,我们可以大致了解到主流工作流引擎的发展史。我这个系列将使用的是 Flowable,所以后续的文章都会围绕 Flowable 展开。通过前面的介绍,我们可以把 Flowable 与BPMN的关系理解为:Flowable 是一个工具,它使用BPMN 2.0作为其流程定义的标准,通过解析BPMN 2.0定义的流程图,Flowable 可以创建、管理和执行这些流程。这样,Flowable 就能够帮助我们实现业务流程的自动化管理。

二、流程设计

对工作流引擎有了一定的认识后,我们就需要开始工作流里最重要的一个环节,那就是设计流程。有了设计的流程模型后,我们才可以通过Flowable进行后续的操作。目前流程设计有以下五种方式,大家根据自己的需要选择适合自己需求的方式。

1.FlowableUI(不推荐)


官方出品,与 Flowable 后台引擎逻辑对接非常好,元素及属性也是最全的。但是真的不适合业务中使用,界面不是太友好,参数设置不是很灵活,基本都是输入框,在实际业务场景中,用户看到你这套估计都头晕。并且官方在7.0中也已经移除了这套设计器,鼓励开发者根据规范去定制自己的流程设计器。当然,FlowableUI 也不是一无是处,在学习阶段我认为还是挺好用的,对我们入门学习还是蛮方便的。

2.BPMN.js自定义

当 FlowableUI 无法满足复杂的流程业务需求时,这个时候"大手子"就可以基于bpmn.js来自定义流程设计器。官网地址:bpmn.io/


感兴趣的同学可以参考中文学习文档:https://github.com/LinDaiDai/bpmn-chinese-document

3.第三方的设计器(推荐)

自己从0到1做当然是个很耗费心力的事情,所以直接用别人开源的设计器当然也是不错的选择,如果自己有定制化需求,那从1到10去改也相对容易了。

比如:gitee.com/MiyueSC/bpm...

4.代码实现

这个方法我推荐业务自定义程度不高的同学去使用,直接在后端通过 BpmnModel 对象创建流程。

三、流程图的组成

为了便于读者理解,我这里简单绘制一个请假的流程图进行讲解:

1.事件

事件用于控制流程的执行、任务分配和流程终止等关键操作,比如上图中看到的两个圆圈就分别是开始事件和结束事件。

2.连线

连线定义了流程的流转路径,决定了流程实例如何从一个节点到达另一个节点。比如上图中将其他元素连在一起的线条。

3.任务

任务是流程中的关键组成部分,用于协调和管理流程实例的执行。比如上图中请假的那个节点,在Flowable 中每一个任务都可以配置表单对该任务的相关信息进行配置,例如处理人。

4.网关

网关用于控制流程的流向和分支。不同类型的网关具有不同的作用。常见的网关有排他网关、并行网关、包容网关。在上图中我并没有绘制网关,为了便于大家理解,我辅助说明下,比如在上图请假节点的责任人同意请假或拒绝请假分别有不同的任务流向,就在这个任务后加个网关进行判断,有些类似于代码中的if判断语句,当然这只是一种情况。

四、小结

作为系列文章的开篇,本篇文章主要是帮助读者对工作流引擎建立起一个初步的认识,在后续的篇章中我将使用Flowable帮助各位读者逐步学习如何在SpringBoot中进行整合和应用。

相关推荐
pride.li2 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
省钱兄--zs2 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲2 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
upala2 小时前
【仓颉语言入门 · 第二篇 第 6 课】
后端
罗丹丹Luna2 小时前
移动端显示“已提交”以后:SAP 与低代码集成该怎样暴露真实状态
后端·架构
用户21296835261683 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
码事漫谈3 小时前
因为太想讨好你,所以AI会骗你
后端
吴凡wudianmei3 小时前
每调一次模型都花钱?如何用工程手段把调用压到最少?
前端·后端·架构
花间相见3 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端