工作流Flowable启动和部署

380

题外话:最近因为项目组的原因,开始折腾工作流相关实现和使用。在参考了很多文章和实现后,在Github上做了几版不一样的项目构建后。加之市面上各种教程层出不齐,难寻其踪,才有了这样一个不完善的记录。

Flowable 简介

起初我也想过,到底什么是工作流?它有什么用?到底怎么入手?
这一切都得从官方转译后的用户手册:https://tkjohn.github.io/flowable-userguide/ 开始说起…

以下其实都是简介 可以跳过。
Flowable术语
一个完整的流程文件被称作流程定义(process definition)。
一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。

例如请假流程中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。
image-1677085307710
为了明确起见,说明一下几个要点:

启动流程需要提供一些信息,例如雇员名字、请假时长以及说明。。
左侧空心圆圈叫做启动事件(start event)。这是一个流程实例的起点。
第一个矩形是一个用户任务(user task)。这是流程中人类用户操作的步骤。在这个例子中,经理需要批准或驳回申请。
取决于经理的决定,排他网关(exclusive gateway) (带叉的菱形)会将流程实例路由至批准或驳回路径。
如果批准,则需要将申请注册至某个外部系统,并跟着另一个用户任务,将经理的决定通知给申请人。
如果驳回,则为雇员发送一封邮件通知他。

每一个步骤(在BPMN 2.0术语中称作活动(activity))都有一个id属性,为其提供一个在XML文件中唯一的标识符。所有的活动都可以设置一个名字,以提高流程图的可读性。

活动之间通过顺序流(sequence flow)连接,在流程图中是一个有向箭头。在执行流程实例时,执行(execution)会从启动事件沿着顺序流流向下一个活动。

离开排他网关(带有X的菱形)的顺序流很特别:都以表达式(expression)的形式定义了条件(condition) 。当流程实例的执行到达这个网关时,会计算条件,并使用第一个计算为true的顺序流。这就是排他的含义:只选择一个。

这里用作条件的表达式为"$ {approved}",这是${approved == true}的简写。变量’approved’被称作流程变量(process variable)。

在流程实例启动后,会创建一个执行(execution),并将其放在启动事件上。从这里开始,这个执行沿着顺序流移动到经理审批的用户任务,并执行用户任务行为。这个行为将在数据库中创建一个任务,该任务可以之后使用查询找到。用户任务是一个等待状态(wait state),引擎会停止执行,返回API调用处。

在Flowable中 JavaDelegate是我们还没有实现申请通过后执行的自动逻辑。在BPMN 2.0 XML中,这是一个服务任务(service task):
现实中,这个逻辑可以做任何事情:向某个系统发起一个HTTP REST服务调用,或调用某个使用了好几十年的系统中的遗留代码。我们不会在这里实现实际的逻辑,而只是简单的日志记录流程。
创建一个新的JAVA类,CallExternalSystemDelegate作为类名。让这个类实现org.flowable.engine.delegate.JavaDelegate接口,并实现execute方法:

分组示例:
我们还没有为用户任务配置办理人。我们想将第一个任务指派给"经理(managers)"组,而第二个用户任务指派给请假申请的提交人。因此需要为第一个任务添加candidateGroups属性,修改流程xml配置文件:

<userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers"/>

项目启动

Environment
Flowable version:6.7.2
Spring boot version:2.6.7
Java version: 1.8

// 首先导入依赖部分
       <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-spring-boot-starter</artifactId>
                <version>6.7.2</version>
            </dependency>

            <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-bpmn-model</artifactId>
                <version>6.7.2</version>
            </dependency>

            <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-bpmn-layout</artifactId>
                <version>6.7.2</version>
            </dependency>
#在spring boot 配置文件中配置相关依赖 暂时关闭掉其他用不到的部分
flowable:
  # 关闭异步,不关闭历史数据的插入就是异步的,会在同一个事物里面,无法回滚
  # 开发可开启会提高些效率,上线需要关闭
  dmn:
    enabled: false
  cmmn:
    enabled: false
  idm:
    enabled: false
  async-history-executor-activate: false
  async-executor-activate: false
  check-process-definitions: false
  #  database-schema-update: true
  content:
    enabled: false
  app:
    enabled: false
  eventregistry:
    enabled: false

注:需要指定数据库地址 和 添加mysql 依赖!!!

项目启动后 会在指定库中生成38张基础表,如下所示
image-1677084704754

这样代表我们项目就正式引入了flowable 并且启动成功了。