Activiti工作流浅析

开发 架构
从公司讲,工作流系统规范了公司的业务流程,优化了企业内部的管理,提高了团队间地协作效率,能够帮助企业向知识型企业转变。

一、工作流

1、工作流概述

在一个公司业务中,每一个业务的开始和结束,都可以理解成为一个工作流。例如公司请假的基本流程。

图片

如图所示,员工先提出请假申请,提交该申请给直属领导审批,直属领导审批后,再提交给人事部门审批,审批完成后,通知提出申请的员工,即请假流程结束。整个步骤按照正常工作方式一步步完成,这就是一个简单而又完整的工作流;工作流可以理解为从开始节点发起流程,然后经过其中多个节点,完成动作,最后到结束节点的整个过程。

在没有工作流引擎之前,为了实现上述的流程控制,开发人员最常用的做法是采用状态值跟踪流程的状态变化,假设初始值为0,每一个流程的流转,状态值+1,然后给出相应的处理逻辑。可以看出工作的流程和业务高度耦合,当流程发生变化时,我们的业务代码也要做出同等的调整。

如果有一个工具帮助我们管理工作流,当业务流程变化后,程序不需要发生变化,最终将会让我们的开发能力和业务能力大幅提升。于是乎,工作流引擎应运而生!

二、Activiti介绍

1、简介

  • Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度
  • Activiti是一种轻量级,可嵌入的BPM引擎,可以将复杂的业务流程抽取出来,然后使用专门的建模语言BPMN2.0定义执行流程,最终业务系统通过访问Activiti的接口去驱动预定义的流程执行
  • Activiti 流程引擎重点关注在系统开发的易用性和轻量性上.每一项BPM业务功能Activiti流程引擎都以服务的形式提供给开发人员.通过使用这些服务,开发人员能够构建出功能丰富,轻便且高效的BPM应用程序

2、Activiti服务架构

图片

activiti.cfg.xml:

Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数

核心类:

​ProcessEngine: 流程引擎的抽象,可以通过此类获取需要的所有服务

服务类:

  • XxxService: 通过ProcessEngine获取,Activiti将不同生命周期的服务封装在不同Service中,包括定义,部署,运行.通过服务类可获取相关生命周期中的服务信息
  • RepositoryServiceRepository Service提供了对repository的存取服务 Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中
  • RuntimeServiceRuntime Service提供了启动流程,查询流程实例,设置获取流程实例变量等功能.此外它还提供了对流程部署,流程定义和流程实例的存取服务
  • TaskServiceTask Service提供了对用户Task和Form相关的操作.它提供了运行时任务查询,领取,完成,删除以及变量设置等功能
  • HistoryServiceHistory Service用于获取正在运行或已经完成的流程实例的信息,与Runtime Service中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化
  • FormService使用Form Service可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单 Activiti中的流程和状态Task均可以关联业务相关的数据
  • IdentityServiceIdentity Service提供了对Activiti系统中的用户和组的管理功能 Activiti中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的Task
  • ManagementServiceManagement Service提供了对Activiti流程引擎的管理和维护功能 这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护

组件

  • 持久化组件:

​Activiti使用mybatis作OR映射,并在此基础上增加设计了自己的持久化框架在流程引擎创建时初始化,顶层接口Session,SessionFactorySession有两个实现类:DbSqlSession: 负责sql表达式的执行AbstractManager: 负责对象的持久化操作SessionFactory有两个实现类:DbSqlSessionFactory: 负责DbSqlSession相关操作GenericManagerFactory: 负责AbstractManager相关操作

  • Event-Listener组件:

Activiti允许客户代码介入流程执行,提供了事件监听组件监听的事件类型:TaskListener、JavaDelegate、Expression、ExecutionListener、ProcessEngineConfigurationImpl持有DelegateInterceptor的某个实例,方便调用handleInvocation

  • Cache组件:

DbSqlSession中有cache的实现Activiti基于List和Map来做缓存:如查询时先查缓存,没有则直接查询并放入缓存

  • 异步执行组件:

Activiti可以执行任务,JobExecutor为其核心类,JobExecutor包含三个主要属性:JobAcquisitionThread、BlockingQueue、ThreadPoolExecutor,方法ProcessEngines在引擎启动时调用JobExecutor.start,JobAcquisitionThread 线程即开始工作,其run方法不断循环执行AcquiredJobs中的job,执行一次后线程等待一定时间直到超时或者JobExecutor.jobWasAdded方法,因为有新任务而被调用。

  • 上下文组件Context:

用来保存生命周期比较长,全局性的信息,类似Application.主要包括如下三类:CommandContext: 命令上下文-保存每个命令必要的资源,如持久化需要的sessionProcessEngineConfigurationImpl: 流程引擎相关配置信息-整个引擎全局的配置信息.如数据源DataSource等.该对象为单例,在流程引擎创建的时候初始化ExecutionContext: 持有ExecutionEntity对象

3、Activiti数据库支持

  • 所有的表都以ACT_开头
  • 第二部分是表示表的用途的两个字母标识
  • 用途也和服务的API对应
ACT_RE_* : 'RE'表示repository. 这个前缀的表包含了流程定义和流程静态资源(图片,规则...)
ACT_RU_* : 'RU'表示runtime.这些运行时的表, 包含流程实例,任务,变量,异步任务,等运行中的数据.
Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录.这样运行时表可以一直很小速度很快
ACT_ID_* : 'ID'表示identity.这些表包含身份信息, 比如用户,组...
ACT_HI_* : 'HI'表示history.这些表包含历史数据, 比如历史流程实例,变量,任务...
ACT_GE_* :通用数据. 用于不同场景下, 如存放资源文件

资源库流程规则表说明:

act_re_deployment   部署信息表
act_re_model 流程设计模型部署表
act_re_procdef 流程定义数据表

运行时数据库表说明:

act_ru_execution       运行时流程执行实例表
act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
act_ru_task 运行时任务节点表
act_ru_variable 运行时流程变量数据表

组织结构表说明:

act_id_group       用户组信息
act_id_info 用户扩展信息表
act_id_membership 用户与用户组对应信息表
act_id_user 用户信息表

4、BPM/BPMN介绍

BPM(Business Process Management),即业务流程管理,是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。常见商业管理教育如EMBA、MBA等均将BPM包含在内。BPMN(Business Process Model AndNotation)即业务流程模型和符号,是一套标准的业务流程建模符号,使用 BPMN 提供的符号可以创建业务流程。Activiti 就是使用 BPMN 进行流程建模、流程执行管理的。BPMN2.0 是业务流程建模符号 2.0 的缩写,它由 Business Process Management Initiative 这个非营利协会创建并不断发展。BPMN2.0 是使用一些符号来明确业务流程设计流程图的一套符号规范,能增进业务建模时的沟通效率。目前 BPMN2.0 是最新的版本,它用于在 BPM 上下文中进行布局和可视化的沟通

BPMN2.0基本符号介绍

简要列表如下:

图片

图片

图片

三、springboot整合Activiti

  • 新建springboot项目
  • pom.xml导入相关依赖

图片

  • 在resource目录下新建process目录作为*.bmnp的存储路径

图片

  • application.yml配置

图片

  • idea安装插件Activiti BPMN visualizer,创建流程图

图片

打开该文件,右键选中如图:

图片

最终会生成xml文件:

图片

 通过读取png和bmnp获取请假流程:

图片

四、考虑使用Activiti的场景

1、关键业务流程: 订单、报价处理、合同审核、客户电话处理、供应链管理等

2、行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等

3、人事管理类: 员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。

4、财务相关类: 付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。

5、客户服务类: 客户信息管理、客户投诉、请求处理、售后服务管理等。

五、总结

从公司讲,工作流系统规范了公司的业务流程,优化了企业内部的管理,提高了团队间地协作效率,能够帮助企业向知识型企业转变。

作为技术开发人员,Activiti在小项目中基于串行并行流转能够基本满足业务和开发的需求;但是Activiti对于技术的要求门槛相对较高,二次开发难度大,需要技术人员不断提升和学习,在实战中研发出具有极高价值的工作流系统。

责任编辑:武晓燕 来源: 新钛云服
相关推荐

2023-07-05 09:48:44

Activiti部署

2009-09-01 18:19:39

C#工作流

2021-12-17 08:39:39

SpringbootActiviti网关路由

2010-06-24 16:40:16

Bittorrent协

2021-10-14 11:34:05

技术工作流引擎

2024-04-25 08:00:00

DevOps架构软件开发

2013-04-23 10:28:08

IBeamMDAAWF

2011-12-14 09:58:58

JavajBPM

2012-07-23 10:36:46

工作流

2010-01-04 17:42:50

SilverLight

2009-03-03 09:13:36

工作流BPM业务流程

2023-01-04 08:02:16

工作流架构设计

2013-09-29 17:13:59

PowerShell工作流

2015-06-24 10:18:26

2024-07-31 08:01:48

2024-10-17 08:39:32

2015-07-14 09:26:28

微型工作流引擎设计

2024-08-05 12:46:51

2009-06-19 15:38:43

Java虚拟机

2009-12-14 15:01:31

架构师
点赞
收藏

51CTO技术栈公众号