Skip to main content

工作流

前言

什么是工作流

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。

工作流要解决的问题

工作流要解决的主要问题:为实现某个业务目标,利用计算机在多个参与者之间按某种预订规则自动传递文档、信息或者任务。

工作流管理系统(WfMS:Workflow Management System)是处理工作流的电脑软件系统,其主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。

工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。

摘自:维基百科-工作流技术

一定要使用工作流技术吗?

在上一节中提到,工作流要解决的主要问题是在多个参与者之间按照某种预订规则实现自动传递文档、信息或者任务。既然如此,那么一定会有人产生这样的疑问:这些不就是业务么,直接设计系统实现不是一样么?为什么有一定要引入工作流引擎呢?

没错,我们确实可以通过自己在系统中去实现这些业务流程的方式来解决工作流需要解决的问题。但是成本很大,且可复用性也不强。

使用工作流技术,不需要我们自己去写复杂的业务控制逻辑就可以实现工作流程的自动流转,只要我们遵循标准的工作流规范去定义流程即可。 有了工作流引擎的加持,我们可以把更多的精力投入到工作流的设计上,而不是在具体工作流程的实现细节上。

工作流技术的使用,可以给我们带来诸多益处,如:

  • 缩短开发周期
    工作流技术采用统一的建模语言(BPMN),使没有专业IT知识的人也可以通过简单的学习快速上手,理想情况下,流程定义的设计开发环节甚至可以脱离专业的IT人员而由业务人员或领域专家进行直接的设计与开发(根据 BPMN 规范输出相应的 xml 流程定义文档),解放了IT人员与业务人员的生产力,使业务人员可以更好的参与到项目中,大大缩短开发周期。
  • 增强可复用性
    同样或相似的流程,我们在从一个系统迁移到另外一个系统的时候,定义过的流程定义文件(即遵循 BPMN 规范的 xml 文件)在新的系统中几乎可以直接复用,即使需要修改一般也只需做局部很小的改动即可实现相似流程在不同系统间的迁移。
  • 降低开发难度
    工作流引擎使我们不需要关心工作流转的技术细节,工作流引擎还提供了诸如会签、流程回退等强大的功能支持,直接解决了很多在开发工作流的过程中难以解决的问题,降低了开发难度。

所以,在有诸多流程需要实现的系统中,引入工作流技术几乎是必然的选择

技术选型

在codelet的工作流引擎技术选型中,我们基于Java的技术栈,综合考察了 ActivitiFlowable 两大工作流引擎。并将二者的对比结果总结如下: |对比项|Activiti|Flowable| |--|--|--| |公司|Alfresco|Flowable AG| |文档|Activiti gitbook|Flowable DOCS| |团队|初期以 Tijs Rademakers 和 Joram Barrez 领衔,后期以 Salaboy 领衔,但是 Salaboy 在19年6月已经从公司离职,其离职之后开发进度明显放缓|以 Tijs Rademakers 和 Joram Barrez 为核心,这二位从 Alfresco 出来以后就就开始自立门户研发 flowable 。从activiti与flowable后来的发展历程来看,这二位毫无疑问是这两个项目的灵魂。从他们离开 Alfresco 之后 Activiti 的工作流引擎就一直原地踏步这点就可见一斑。| |优势|1.更多的资料(尤其是中文资料)|1.更活跃的核心团队
2.更新的流程引擎
3.更快的迭代速度
4.与Activiti一脉相承,数据库与API的设计与Activiti几乎保持一致| |劣势|1.相对不够活跃的开发团队
2.上一代的流程引擎
3.缓慢的迭代速度|1.更少的资料(尤其是中文)| 由团队方面的对比可知,其实 ActivitiFlowable 这两个项目是一脉相承的,Flowable 中的核心开发人员其实就是从前 Activiti 的核心开发成员,关于这两个项目的历史,这里就不详细介绍了。可以肯定的是,Flowable 在当前相对于 Activiti 的优势是非常明显的,而且在可预见的未来,发展前景也要更好,虽然现阶段中文资料相对缺乏,但是由于与 Activiti 的特殊关系,很多问题可以直接查阅 Activiti 的相关资料以获得帮助。

综上,我们选择 Flowable 作为我们的工作流引擎。

Flowable 相关资料:
官网
英文文档(v6.4.2)
中文文档(v6.3.0)

开发环境搭建

软件版本说明

项目工程开发及运行所需软件: |项目|版本|说明| |:---|:---|:---| |Java SE Development Kit|1.8.221|Java 开发工具包| |flowable|6.4.2| 工作流引擎 |

与SpringBoot环境集成

SpringBoot 工程中集成 Flowable 非常简单。通常只需要两步。

1.引入 flowable starter 依赖

pom.xml 中加入下面的依赖配置:

<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.4.2</version>
</dependency>

如果版本号过期,可以访问这里查看最新的版本号。

如果想自定义引入 Flowable 提供的某些功能,请参照 Flowable Spring Boot Starter 列表

2.配置数据源

这里以Mysql为例。在 application.properties 中加入下面配置:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 在启动应用之前,我们需要确保要反问的服务器已经正确安装Mysql,并在mysql中创建了名称为 flowable-spring-boot 的数据库。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/flowable-spring-boot?characterEncoding=UTF-8
# 这里需要根据实际情况设置用户名与密码。
spring.datasource.username=root
spring.datasource.password=root

pom.xml 中加入下面的依赖配置:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>

数据源配置完成后,启动 SpringBoot 工程,Flowable 会自动在我们配置的数据库中建立流程引擎需要的数据库表(下图展示了一部分生成的数据库表)。

flowable-spring-boot-db.png

工程启动后,

  • resources/processes 目录下的任何BPMN 2.0流程定义都会被自动部署。
  • resources/cases 目录下的任何CMMN 1.1事例都会被自动部署。
  • resources/forms 目录下的任何Form定义都会被自动部署。

流程设计工具

Eclipse Designer

Flowable 提供了名为 Flowable Eclipse DesignerEclipse 插件,可以用于图形化地建模、测试与部署 BPMN 2.0 流程。

安装

选择 Help → Install New Software。在下图的面板中,点击Add按钮,并填写下列字段:

eclipse-designer-add-update-site.png

功能

  • 创建 Flowable 项目与流程图 eclipse-designer-create-project-and-diagram.png Flowable Designer在创建新的Flowable流程图时,会创建一个.bpmn文件。

  • 编辑 BPMN 流程图
    当使用Flowable Diagram Editor(Flowable流程图编辑器)视图打开.bpmn文件时,Flowable Designer将提供图形化的模型画布与画板。这个文件也可以使用XML编辑器打开,将显示流程定义的BPMN 2.0 XML元素。 eclipse-designer-create-project-and-diagram.png

    注意,也可以使用Flowable Diagram Editor打开.bpmn20.xml文件。

    我们可以利用Flowable Designer提供的图形化元素面板绘制我们自己所需要的流程图。 eclipse-designer-diagram-palette.png

更多有关Flowable Designer的内容,请参见这里

Flowable Modeler

Flowable ModelerFlowable 的基于 OryxAngular 的 Web 端应用。从名字可以看出,这个应用的主要功能就是建模。 Flowable Modeler 应用提供了建模 BPMN 流程、DMN 选择表、表单定义以及创建应用定义等诸多功能。

简单示例

常见的坑