type
status
date
slug
summary
tags
category
icon
password
Property
Aug 19, 2022 07:05 AM
Flowable-Demo:一个简单流程分析
在创建Flowable的Engine之前,我们需要了解一件事:Flowable的创建,离不开源文件。所谓Flowable的流程图源文件,就是前端绘制流程后,以XML的格式记录的源文件。XML文件是Flowable的形式定义文件,根据对xml文件的特征属性的抽取,进而将关键的特征数据存储进入DB,以特征数据作为构建Flowable流程引擎的一个模型,这样就达到了Flowable流程引擎到数据模型存储的目的。
至此,我们只需要知道Flowable本身就可以看做是一个流程,这个特殊的流程内部定义了处理XML文件的一系列业务流程。虽然听起来比较绕,但是也不难理解,Flowable本身就是一个处理流程对象的模型,我们只需要意识到:既然是模型一定需要数据的输入。
说了半天就是需要意识到这一点,因为很多同学在第一次接触这个东西时候,对于其提供的内部API不知道如何使用,对如何将流程绘制的数据载体传递到FLowable中不是很熟悉。但你只需要掌握这一点,就够了。
既然是模型,那么模型也是在大量的样本数据中建立的,模型的建立也正是为了处理抽象化得海量样本数据。
接下来,我们以Flowable本身看做是一个Model的形式,结合一个入门案例,来快速上手Flowable工作流。
一、快速上手
这里你可以直接下载我创建好的maven项目直接学习,或者按照下方的流程重新创建一个maven项目。
如果选择自主创建,那么创建一个Maven项目,选择Java版本是11.0.X。
连续创建两个,以第一个作为parent,后续为children:
这么做,可以让你回顾回顾maven项目的父子结构关系以及方便我们更加专心写代码,只需要将所有的依赖管理都放置在父项目中。在父项目中导入项目依赖:
Flowable提供了不同的ProcessEngineConfiguration实现,主要依赖于底层的事务管理策略。
然后在子项目中引入依赖:
至此,项目结构已经搭建完毕,剩下的就是在此基础上做进一步的研究。
如果你不想自己创建,节省时间,可以直接下载我的源码包:点击下载
二、案例分析
现在有一个需求:构建一个流程模拟向自己的一级主管申请假期调休,如何进行?
第一步:创建一个H2BaseUtils工具类
使用Flowable来实现这个操作,我们需要首先去初始化一个流程引擎,尽管你可能到这里还没有了解清楚创建流程的一个基本过程是什么样子,但没有关系,我们先这么做,一步一步去学习就可以了。首先要做的是初始化ProcessEngine流程引擎实例。这是一个线程安全的对象,因此通常只需要在一个应用中初始化一次。
ProcessEngine由ProcessEngineConfiguration实例创建。该实例可以配置与调整流程引擎的设置。 通常使用一个配置XML文件创建
ProcessEngineConfiguration,但是(像在这里做的一样)也可以编程方式创建它。 ProcessEngineConfiguration所需的最小配置,是数据库JDBC连接:
第二步:创建一个HolidayRequest.java文件,构建流程
第三步:增加一个log配置文件(文件名:log4j.properties)
我们要构建的流程是一个非常简单的请假流程。Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。 在Flowable术语中,我们将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。 在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。
BPMN 2.0存储为XML,并包含可视化的部分:使用标准方式定义了每个步骤类型(人工任务,自动服务调用,等等)如何呈现,以及如何互相连接。这样BPMN 2.0标准使技术人员与业务人员能用双方都能理解的方式交流业务流程。
我们要使用的流程定义为:
这个流程应该已经十分自我解释了。但为了明确起见,说明一下几个要点:
- 我们假定启动流程需要提供一些信息,例如雇员名字、请假时长以及说明。当然,这些可以单独建模为流程中的第一步。 但是如果将它们作为流程的“输入信息”,就能保证只有在实际请求时才会建立一个流程实例。否则(将提交作为流程的第一步),用户可能在提交之前改变主意并取消,但流程实例已经创建了。 在某些场景中,就可能影响重要的指标(例如启动了多少申请,但还未完成),取决于业务目标。
- 左侧的圆圈叫做启动事件(start event)。这是一个流程实例的起点。
- 第一个矩形是一个用户任务(user task)。这是流程中人类用户操作的步骤。在这个例子中,经理需要批准或驳回申请。
- 取决于经理的决定,排他网关(exclusive gateway) (带叉的菱形)会将流程实例路由至批准或驳回路径。
- 如果批准,则需要将申请注册至某个外部系统,并跟着另一个用户任务,将经理的决定通知给申请人。当然也可以改为发送邮件。
- 如果驳回,则为雇员发送一封邮件通知他。
一般来说,这样的流程定义使用可视化建模工具建立,如Flowable Designer(Eclipse)或Flowable Web Modeler(Web应用)。
但在这里我们直接撰写XML,以熟悉BPMN 2.0及其概念。
与上面展示的流程图对应的BPMN 2.0 XML在下面显示。请注意这只包含了“流程部分”。如果使用图形化建模工具,实际的XML文件还将包含“可视化部分”,用于描述图形信息,如流程定义中各个元素的坐标(所有的图形化信息包含在XML的BPMNDiagram标签中,作为definitions标签的子元素)。
第四步:创建holiday-request.bpmn20.xml文件
将下面的XML保存在src/main/resources文件夹下名为holiday-request.bpmn20.xml的文件中。
到此为止,一个请假的流程已经走完。
(所有的流程详细分析,都需要结合代码讲解,所有我都放在了注释上面)。
一定重点看代码,所有的流程分析都在代码注释里面!
- 作者:fntp
- 链接:https://polofox.com/article/flowable-singleExample
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章