「Activiti精品 悟纤出品」核心类以及如何在SpringBoot集成说明 - 第328篇

前言

       原本是计划直接开干,讲解如何在Spring Boot中如何集成Activiti的,但在实操的时候,发现直接开干的话,确实有点难于理解。本篇先把思路和概念性的东西过掉,这样后续对于怎么集成就会比较好理解。

一、Activiti流程模型搭建回顾

1.1 核心的几个步骤

       我们回顾下之前的文章中流程模型搭建的核心步骤,这里以activiti6的操作来进行说明,如果你还不知道怎么流程搭建的,请回看文章《「工作流Activiti」流程模型搭建-小试牛刀》。

       我们来简单回顾一下核心的步骤:

(1)创建用户和用户组:主要是用于流程中的发起和审批使用的。

(2)创建流程实例:用于流程的设计,具体的操作就是使用了可视化的操作,进行BPMN规定的元素进行操作,最终就是一个XML的文件。

(3)创建表单:用于流程某些节点的数据源,比如提交请假审批,那么就要有一个请假单进行填写。

(4)创建App和发布:我们通过创建一个应用,然后应用中绑定流程进行流程的发布,发布之后的流程就可以进行操作了,用户可以发起此应用发起流程。

 

1.2 其它说明

       我们在使用activiti-app的种种操作,核心就是为了获取到bpmn文件,在和spring boot集成的时候,这个文件就是核心了,那么我们是必须要使用activiti-app才能进行创建bpmn文件嘛,答案:不是。在前面的小节,我们也介绍了相应的工具的插件,在实际开发的过程中,开发人员使用插件的方式肯定是比activiti-app的方式方便呐。

 

二、Spring Boot中集成Activiti说明

2.1 集成说明

       对于Spring Boot中的集成一般都是引入相关的依赖即可。

对于activiti6和7的依赖是有很大的区别的:

Actviti6:

  1. <dependency>
  2. <groupId>org.activiti</groupId>
  3. <artifactId>activiti-spring-boot-starter-basic</artifactId>
  4. <version>6.0.0</version>
  5. </dependency>

Actviti7:

  1. <dependency>
  2. <groupId>org.activiti</groupId>
  3. <artifactId>activiti-spring-boot-starter</artifactId>
  4. <version>7.1.0.M6</version>
  5. </dependency>

      当然对于依赖而言,只是这个依赖配置不一样,但是底层的一些核心还是一样的。

2.2 集成思路

       对于Activiti的单独使用我们已经有了一个了解,对于如何集成,和activiti的使用有一定的相通之处。

       我们看看核心的一些点:

2.2.1 构建流程图文件bpmn

       对于流程图而言,最新的就是这个bpmn描述文件了,所以我们第一步就是要有这么一个文件才能后续的操作。

2.2.2 流程的操作

       不管是流程的发布还是流程的发起、审批都是流程的操作,在activiti-app中是activiti-app这个工程的底层帮我们完成了,那么底层是如何完成的呐,是不是activiti的引擎进行完成的呢,是的。

Activiti的工作流引擎帮我们把这些在流程中的节点进行进行处理,以完成整个流程。那么在我们自己集成的Spring Boot中,引入了activiti相关的jar文件,那么对于要发起流程是不是只要调用activiti中的相关的发起流程方法就好了。

 



三、Activiti的核心类

       在上面分析到了Activiti工作流引擎是由核心的一些指令进行发起相应的操作的,我们这里看看具体都有什么核心的类,可以供我们进行操作,这里很重要,后续的集成例子会用到部分的类。

3.1 架构图和核心类图

Activiti采用了一个分层架构完成自底向上的包装。架构图如下:

 

图片

 

       对于Activiti的架构这里不展开说明,要是展开说明这一节又讲不完了,哎一讲东西就多,这是要闹哪样呐。

       我们还是来看下核心类图吧:

图片

    














  接下来我们就看看这些类都是用来做什么的。

 

3.2 核心类

3.2.1 ProcessEngine

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

3.2.2 repositoryService

       activiti是不能直接识别xml格式的流程图的,流程图文件必须被部署到activiti中才能被activiti识别并使用。而这个过程就是使用repositoryService来完成的,流程图被导入后,会放到act_re_打头的几个表中。repositoryService提供了若干个接口,既可以部署xml文件到数据库中,也可以从数据库检索特定流程图供处理。

3.2.3 runtimeService

activiti最重要的一个服务,基本上所有的关于流程的操作都是通过此服务来执行的。例如启动流程、审批、会签等等。

3.2.4 formService

工作流的设计思路之一就是将每个节点需要显示的数据直接绑定到此节点。而formService就是专门为此服务的,使用formService可以获取某个节点绑定的表单数据。当然,如果没有表单绑定到此节点,此服务就没有任何用处。

3.2.5 identityService

activiti自带的用于管理自身的组织机构的服务。activiti自身的组织机构包括user和group两大类,而user、group以及user和group的关系都是通过自服务来维护的。因此如果需要使用activiti自身的组织机构的,就会使用到此服务。不过通常情况下我们都是是用的框架中的身份认证和组织机构,所以此服务使用频率也不高

3.2.6 taskService

       任务是activiti的核心功能之一,所有涉及到任务的操作都是通过此服务来完成的。例如任务的查询、分配、认领、完成等。

3.2.7 historyService

所有流程实例的信息都会被保存的历史信息中,当一个流程实例结束之前,它是被保存在runtime和history两个地方,当它结束后,就只有history里了。

3.2.8 managementService

提供对activiti数据库的直接访问,因此通常情况下使用不到此服务。

 

3.3 Event-Listener组件

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

3.4 异步执行组件

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








购买完整视频,请前往:http://www.mark-to-win.com/TeacherV2.html?id=287