activiti7(三):Activiti7简介与HelloWorld

本文介绍了Activiti7工作流引擎的基础概念、特点及其部署和执行流程的方法。通过一个简单的请假流程案例,详细展示了如何使用Activiti7 API进行流程部署、启动、查询和办理任务等操作。

上一讲我们画了一个简单的请假的业务流程图,这一讲我们把它部署到activiti7中,并将它执行完毕。先简单介绍下Activiti7工作流引擎。

一、Activiti7简介

1、Activiti7是什么?

Activiti7只是对BPMN2.0规范实现的一个java框架而已,他是一个工作流程控制和管理框架,就是来处理系统中的业务流程的,对整个业务系统起到辅助和支持作用。一般有两种存在方式,一种是和业务代码耦合在一块,另一种是依靠activiti7做成单独的微服务,实现功能的复用,成为真正的工作流“引擎”。

之所以将他称之为工作流引擎,我想有两个原因,第一activiti7是用来处理业务流程的,这些业务流程统称为工作流;第二,引擎的原因是他对代码对了高度封装,完全屏蔽掉了底层,暴露出很简单的操作API,只需要简单操作(实则底层做了大量工作)就能完成复杂的业务流程处理,就像发动机引擎一样,内部实现很复杂,但是用户使用起来确很简单,所以称之为引擎。

2、为什么要用它?或者说他解决了什么问题?

1)工作流引擎本身的目的就是为了辅助业务系统,处理复杂的业务流程,实现流程自动化处理,减轻开发人员的负担,提高企业运作效率,为企业赋能。对于开发人员来说,无论多么复杂的业务流程,只要是用BPMN2.0规范画的业务流程图,用activiti7都可以轻松应对,甚至有时当业务流程发生改变后,都不需要改原来的代码。这一切都源于BPMN2.0规范和acitivit7代码的高度封装屏蔽了底层的实现。

2)什么场景下适合使用工作流引擎?

  • 如果要做的是事需要多个节点参与,即需要走一个流程的时候,可以使用工作流引擎,因为他就是专门对流程进行处理、控制和管理的。
  • 如果业务流程可能会发生改变,要用工作流引擎,可以做到基本不用修改原来的代码。就从这一点来说,开发人员都要选择使用它。
  • 如果业务流程很复杂,要用工作流引擎,可以化繁为简,使代码变得简单。

3、要学习他的什么?

愚以为学习activiti7要重点关注以下几点,就算是基本完成activiti7的学习了:

1)熟悉 BPMN2.0规范并会画图。

2)熟悉activiti7的工作流程。

3)熟悉activiti7的API。

4)熟悉activiti7生成的数据表及其字段的含义。

5)熟悉activiti7的基本操作流程。

①、画业务流程图——对业务流程进行建模

②、部署流程图给activiti(解析xml,并保存到数据库中)

③、启动流程

④、查询待办任务

⑤、办理任务(④、⑤可能会循环好几遍)

⑥、流程结束

4、activiti7和activiti6的区别:

大部分的功能都是一样的,不同点是:activiti6是28张数据表,activiti7是25张,少了用户和组的三张表。相应的服务接口也少了俩:IdentityService和FormService。另外activiti7中对activiti6的API再次进行了封装,使得用户操作代码更简洁了,并新增加了分布式和云部署的功能,核心没变。

5、支持的数据库:

默认内置的内存数据库h2,mysql,oracle,postGreSql,db2

6、操作api架构图

前面也说了,activiti7和activiti6相比核心没变。一个默认在类路径下的配置文件activiti.cfg.xml,和配置文件对应的配置类ProcessEngineConfiguration,配置文件用于将配置类的属性信息在外部配置,配置类用于将配置文件的内容封装成java代码。一个核心流程引擎对象ProcessEngine,根据配置类的信息来创建和初始化。由ProcessEngine对象的getXXXService方法获取各种操作service对象,结构很清晰。

7、整体架构图

中间有一个命令拦截器CommandInterceptor,用于对上层的操作拦截并转化为底层可识别的命令,作用有点类似于业务网关,或者语言解释器。

8、用activiti开发工作流的一个基本开发模式

功能复用:对于像查询待办任务、已办任务、抄送我的、我发起的流程、流程部署、流程挂起与激活、生成流程图等这样的可以复用的功能,使用一套代码即可,提供统一的接口或service。

功能不复用:但是对于启动流程、完成任务这样的功能,因为每个流程的参数或流程变量不一样,并且任务完成之后做的回调事情也不一样,如果不能复用,则每一个流程都单独开发这样的功能。

目前采用的方式是:对于启动流程、完成任务抽象出一个interface,让不同的流程service实现各自不同的操作;创建一个简单工厂,根据流程类型实例化不同的流程service;对外只暴露出启动流程和完成任务两个接口,前端传递不同的流程类型,执行不同的service操作。

数据表扩展:如果activiti提供的数据表无法满足业务需求,可以建立关联表,辅助业务运行。
   
这样基本可以实现,即使当流程发生改动的时候,也只需要对启动流程、完成任务这样单独的功能,改动很少的代码就可以应对改动了。如果流程图是一条直线,删除其中的几个节点后,甚至都不需要改动代码。

二、Activiti7的HelloWorld

1、环境准备

由于是helloworld,本次就用maven+单元测试的方式实现,稍后会有activiti7与spring、springBoot的整合。

1、pom.xml中添加依赖

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值