Activiti 入门学习笔记(activities)

网友投稿 893 2022-05-30

写在前面

一直想学习下Activiti,自己之前工作的时候尝试了很多次,但都失败了,因为之前的工作就是做工作流的,但是旧项目是自己通过状态值驱动流程的,维护困难,新的平台使用了Activiti5,但是是基于低代码平台,都封装好了,所以我也不知道具体是个啥情况,蹭现在离职了,来之不易的时间,学习一波。哈哈

BPMN设计器(Activiti Modeler)的问题:因为IDEA版本的问题,设计器弄有些麻烦,所以自己网上找了一个轮子做Demo,简单编码,做了一些业务扩展。

笔记是结合B站上的教学视频做的,作为入门。

Activiti 入门学习笔记(activities)

码云上找了一个开源项目,2k的★★,有兴趣的小伙伴可以看看。https://gitee.com/shenzhanwang/Spring-activiti/tree/spring-boot-activiti

世界是意志的,是一個痛苦的世界。—叔本華

Activiti Modeler

码云仓库Activiti Modeler:https://gitee.com/liruilonger/Activiti-Modeler/blob/master/README.md

具体的Demo代码:https://gitee.com/liruilonger/Activiti-Modeler.git

设计器搞定了,我们了解下具体的概念吧,先了解一下大概的东西,然后我们基于Springboot Activiti7搭一个开发环境,那就愉快的开始Activiti7之旅吧。

Activiti7 学习

一、Activiti7介绍

Activiti是目前使用最为广泛的开源工作流引擎,2010年5月就正是启动了。在了解Activiti之前,我们首先要了解下什么是工作流。

工作流WorkFlow

关于什么是工作流:就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 其实说直白一点,就是业务上一个完整的审批(评审)流程。

例如员工的入职、请假、出差、采购等等、还有一些关键业务如订单申请、合同审核等等,这些过程,都是一个工作流。对于工作流,传统的处理方式往往需要有人拿着各类的文件,在多个执行部门之间不断的审批。而当我们开始用软件来协助处理这一类审批流程时,就开始出现了工作流系统。工作流系统可以减少大量的线下沟通成本,提高工作效率。有了工作流系统之后,才开始出现工作流引擎。

在没有专门的工作流引擎之前,我们为了实现这样的流程控制,通常的做法都是采用状态字段的方式来跟踪流程的变化情况。例如对一个员工请假请求,我们会定义已申请、组长已审核、部门经理已审核等等这样一些状态,然后通过这些状态来控制不同的业务行为,比如部门经理角色只能看到组长已审核通过的,并且请假天数超过3天的订单等等。这种实现方式实现起来比较简单,也是软件系统中非常常用的一种方式。但是这种通过状态字段来进行流程控制的方式还是有他的弊端。

一方面:整个流程定义不够清晰。业务流程是分散在各个业务阶段中的,从代码的角度非常难以看到整个流程是如何定义的。

一方面:当流程发生变更时,这种方式编写的代码就需要做非常大的变更。例如从三级审批要增加为四级审批甚至是协同审批,那各个业务阶段的审批流程都需要随之做大量的变更。

正是出于这些痛点,后面才有了工作流引擎。使用工作流引擎后,整个审批流程可以在同一个地方进行整体设计,并且当审批流程发生变更时,业务程序也可以不用改变。这样业务系统的适应能力就得到了极大提升。

其实引擎的思想无处不在。我们有Drools规则引擎,可以在程序不发生变动的情况下,集中定义业务规则并进行修改。Aviator表达式引擎,可以快速计算某一个表达式的结果。搜索引擎,可以快速进行统一搜索等等。其核心思想都是将业务之间的共性抽取出来,减少业务变动对程序的影响。

是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它通过执行经过计算的流程定义去支持一批专门设定的业务流程。工作流管理系统被用来定义、管理、和执行工作流程。

管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。

Activiti工作流引擎

Activiti正是目前使用最为广泛的开源工作流引擎。Activiti的官网地址是 https://www.activiti.org 历经6.x和5.x两个大的版本,目前最新的版本是 Activiti Cloud7.1.0-M11。

Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发jBPM版本1 到4时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。

他可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义。业务流程按照预先定义的流程执行,整个实现流程完全由activiti进行管理,从而减少业务系统由于流程变更进行系统改造的工作量,从而减少系统开发维护成本,提高系统的健壮性。所以使用Activiti,重点就是两个步骤,首先使用BPMN定义流程,然后使用Activiti框架实现流程。

建模语言BPMN

谈到BPMN,首先就要谈BPM。 BPM即Business Process Managemenet,业务流程管理。是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。在常见的商业管理教育如EMBA、MBA中都包含了BPM的课程。

有了BPM的需求,就出现了BPM软件。他是根据企业中业务环境的变化,推进人与人之间,人与系统之间以及系统与系统之间的整合及调整的经营方法域解决方案的IT工具。

通过对企业业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得到提升。BPM软件在企业中应用非常广泛,凡是有业务流程的地方都可以使用BPM进行管理。比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。

而BPMN是Business Process Model And Notation 业务流程模型和符号,就是用来描述业务流程的一种建模标准。BPMN最早由BPMI(BusinessProcessManagement Initiative)方案提出。由一整套标准的业务流程建模符号组成。使用BPMN可以快速定义业务流程。BPMN最早在2004年5月发布。2005年9月开始并入OMG(The ObjectManagemenet Group)组织。OMG于2011年1月发布BPMN2.0的最终版本。BPMN是目前被各大BPM厂商广泛接受的BPM标准。Activiti就是使用BPMN2.0进行流程建模、流程执行管理。整个BPMN是用一组符号来描述业务流程中发生的各种事件的。BPMN通过在这些符号事件之间连线来描述一个完整的业务流程。

表结构解读

从这些刚才创建的表中可以看到,activiti的表都以act_开头。第二个部分表示表的用途。用途也和服务的API对应。28张表,我们熟悉下。

ACT_GE : GE 表示 general。 通用数据, 用于不同场景下.

ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

ACT_ID:用户的身份信息

ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。

ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

Activiti核心类

我们先看一个简单的Demo,学习一下ProcessEngine这个引擎类

/** * 添加业务key 到Activiti的表 */ @Test public void addBusinessKey(){ // 1、获取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 2、获取RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); // 3、启动流程的过程中,添加businesskey // 第一个参数:流程定义的key // 第二个参数:businessKey,存出差申请单的id,就是1001 ProcessInstance instance = runtimeService. startProcessInstanceByKey("myLeave", "1001"); // 4、输出 System.out.println("businessKey=="+instance.getBusinessKey()); }

package org.activiti.engine; import org.activiti.engine.api.internal.Internal; /** * Provides access to all the services that expose the BPM and workflow operations. * // 提供对公开BPM和工作流操作的所有服务的访问。 *

    *
  • * {@link org.activiti.engine.RuntimeService}: Allows the creation of {@link org.activiti.engine.repository.Deployment}s and the starting of and searching on * {@link org.activiti.engine.runtime.ProcessInstance}s.
  • *
  • * {@link org.activiti.engine.TaskService}: Exposes operations to manage human (standalone) {@link org.activiti.engine.task.Task}s, such as claiming, completing and assigning tasks
  • *
  • * {@link org.activiti.engine.ManagementService}: Exposes engine admin and maintenance operations
  • *
  • * {@link org.activiti.engine.HistoryService}: Service exposing information about ongoing and past process instances.
  • *
* * Typically, there will be only one central ProcessEngine instance needed in a end-user application. Building a ProcessEngine is done through a {@link ProcessEngineConfiguration} instance and is a * costly operation which should be avoided. For that purpose, it is advised to store it in a static field or JNDI location (or something similar). This is a thread-safe object, so no special * precautions need to be taken. * */ @Internal public interface ProcessEngine { /** the version of the activiti library */ public static String VERSION = "7.1.0-M6"; // Note the extra -x at the end. To cater for snapshot releases with different database changes /** * The name as specified in 'process-engine-name' in the activiti.cfg.xml configuration file. The default name for a process engine is 'default */ String getName(); void close(); // activiti的资源管理类 RepositoryService getRepositoryService(); // activiti的流程运行管理类 RuntimeService getRuntimeService(); // activiti的任务管理类 TaskService getTaskService(); // activiti的历史管理类 HistoryService getHistoryService(); // activiti的引擎管理类 ManagementService getManagementService(); // activiti动态处理 bpmn 模型类 DynamicBpmnService getDynamicBpmnService(); // 创建方法 ProcessEngineConfiguration getProcessEngineConfiguration(); }

RepositoryService:是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。

[x] 帮助我们实现流程定义的部署。此服务会处理与流程定义相关的静态数据。

[x] 查询引擎中的发布包和流程定义。

[x] 暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。

[x] 获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。

RuntimeService:Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

TaskService:Activiti的任务管理类。可以从这个类中获取任务的信息。

HistoryService:Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。

ManagementService:Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

BPMN 2.0学习

关于bpmn的学习,这里不多介绍,小伙伴可以移步到我的其他的博客,专门整理了一份笔记。BPMN 2.0学习笔记 (基于Activiti实践学习笔记)

Activiti7与SpringBoot整合开发

Activiti7正式版发布后,就已经支持与SpringBoot2.X版本完全整合开发了。

引入maven依赖:核心的依赖就是org.activiti:activiti-spring-boot-starter,数据库依赖等,pom.xml 文件:https://gitee.com/liruilonger/Activiti-Demo/blob/master/pom.xml

创建配置文件application.yml https://gitee.com/liruilonger/Activiti-Demo/blob/master/src/main/resources/application.yml

https://gitee.com/liruilonger/Activiti-Demo.git

这样基本的框架就搭建好了。准备工作我们已经做完啦,下面就开始进入正题啦

Java

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:redhat 7更换使用centos 7的yum源(redhat Linux)
下一篇:华为ModelArts-Lab拓展试验记录(三)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~