【Activiti】原理

news2024/11/17 7:30:37

一、核心类

  • RepositoryService:部署管理流程资源,如bpmn文件、附件等等;
  • RuntimeService:操作运行时的流程;
  • TaskService:流程中任务的信息;
  • HistoryService:流程的历史信息;
  • ManagerService:管理流程引擎的信息。

二、核心表

  • ACT_GE_*:General,表示通用表。
  • ACT_HI_*:History,保存历史数据,比如执行过的流程实例、变量、任务等等。Activiti默认提供四种历史级别:none(不保存任何历史记录)、activity(保存所有的流程实例、任务、活动信息)、audit(默认级别,保存所有的流程实例、任务、活动、表单属性)、full(最完整的历史记录,详细到日志跟踪)。
  • ACT_ID_*:Identity,保存身份信息,比如用户和组之间的关系。Activiti被集成到某一系统时,这些表可以不用,而直接使用现有系统中的用户或组信息。
  • ACT_RE_*:Repository,保存一些仓库信息,比如流程定义流程资源(图片或规则等)。
  • ACT_RU_*:Runtime,保存一些流程实例用户任务变量等的运行时数据。当流程结束后会立即移除这些数据。

三、使用步骤

(1)编写bpmn文件,画流程图,在application.yml配置文件中【process-definition-location-prefix】标明需要扫描的流程图路径;

(2)创建流程引擎;

(3)获取RepositoryService实例:相当于拿到数据库连接;

(4)使用RepositoryService部署流程:相当于使用RepositoryService操作数据库。此处可设置流程名字、addClassPathResource()绑定流程图、部署流程。

(5)启动流程【RuntimeService】;

(6)创建任务【TaskService】;

(7)根据流程定义处理人等查询,并根据任务ID完成任务:taskService.complete()。

// 1.创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 2.获取RepositoryService实例:相当于拿到数据库连接
RepositoryService repositoryService = processEngine.getRepositoryService();

// 3.使用RepositoryService部署流程:相当于使用RepositoryService操作数据库
Deployment deployment = repositoryService.createDeployment()
        .name("请假申请流程")                        // 设置流程的名称
        .addClasspathResource("processes/Leave.bpmn")    // 设置流程所用到的资源
        .addClasspathResource("processes/Leave.png")     // 设置流程所用到的图片
        .deploy();    // 部署流程,相当于插入操作

// 4.获取RuntimeService,根据流程定义ID启动流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myLeave");

// 5.创建TaskService,根据流程key和任务负责人查询此流程(myLeave)下的该负责人(zhangsan)所拥有的任务信息。
TaskService taskService = processEngine.getTaskService();

// 6.获取TaskService,完成任务
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery()
        .processDefinitionKey("myLeave")
        .taskAssignee("zhangsan")
        .singleResult();
if (task != null) {
    taskService.complete(task.getId());
}

四、 Activiti和Flowable对比

(一)Flowable的优点:

  • 架构灵活:Flowable的架构非常灵活,可以轻松地嵌入到Spring或者其他Java应用中,也可以作为独立的服务运行。
  • 扩展性强:Flowable提供了插件机制,可以方便地扩展和定制工作流引擎的功能。
  • 高可用性:Flowable支持分布式部署,可以实现高可用性的工作流引擎。
  • 维护活跃:Flowable项目有一个活跃的社区,提供了及时的技术支持和更新。

(二)Flowable的缺点:

  • 文档相对较少:Flowable相对于Activiti,文档相对较少。
  • 社区相对较小:Flowable的社区相对于Activiti,规模较小。

(三)Activiti的优点:

  • 文档详细:Activiti的官方文档非常详细,易于新手学习和使用。
  • 社区活跃:Activiti的社区规模较大,提供了广泛的技术支持和资源。
  • 易于集成:Activiti可以轻松地与Spring集成,也可以作为独立的服务运行。
  • 贡献者较多:Activiti是一个比较成熟的工作流引擎,有大量的贡献者和用户,可以提供成熟的解决方案。

(四)Activiti的缺点:

  • 扩展性较弱:Activiti的插件机制较为有限,扩展和定制功能不如Flowable方便。
  • 可靠性较低:Activiti在一些用户反馈的场景下,存在一些稳定性问题,需要注意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZYNQ——按键和LED关联实验

ZYNQ 7020黑金开发板的PL端有四个LED,如下图所示。 PL端也有四个KEY,如下图所示。 本文将把这四个按键和四个LED一一对应起来,在按键按下或松开时,对应的LED产生亮或灭的信号。 在原理图中找到PL端的LED和KEY如下图所示。 通过…

成为python爬虫工程师需要哪些知识?

爬虫(Web crawler)是一种自动化程序,用于从互联网上抓取、解析和提取网页数据。它模拟浏览器行为,通过发送HTTP请求获取网页内容,并通过解析网页源代码或DOM结构,提取所需的信息。以python爬虫为例&#xf…

优思学院|作业标准和标准化作业有何区别?傻傻搞不清?

作业标准和标准作业是两个在生产和制造环境中具有重要意义的概念。尽管它们看似相似,但实际上它们在定义、目的和实施方法上存在显著差异。本文将探讨作业标准和标准作业的区别,以及它们在工作场所中的作用和重要性。 1. 引言 在制造领域中&#xff0c…

JDBC小记——SQL注入及预编译操作对象、批处理

目录 SQL注入 预编译操作对象 自定义JDBC工具类 1.创建配置文件 2.配置 3.在工具类中使用配置文件 批处理 注意事项 SQL注入 SQL注入是黑客对数据库进行攻击的常用手段之一,他们拼接一些恶意的sql语句,来获取他们想要的数据。 例: s…

Bpmn.js流程建模结合业务整合工作流(一)

bmpn.js是什么? 先上图 初步认识bpmn.js 相关文档直接上链接 全网最详bpmn.js教材-基础篇 - 掘金bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 因为公司业务的需要因而要在项目中使用到bpmn.js,但是由于bpmn.js的开发者是国外友人, 因此国…

【2023年中总结】是的,我从一家世界前百强企业毕业了,进入了一家只有20人的小企业。。。

我的2023-上 🕐 一、引言🕜 二、新年🕙 三、措手不及🕥 四、抉择🕚 五、适应🎉测试驱动开发🎉角色的转变🎉工作环境和生活环境的转变🎉工作态度 🕦 六、挑战&…

【裸机开发】定时器中断(EPIT)

EPIT 是周期性中断定时器,会定期调用指定的中断服务函数,其实可以看做是一种IRQ的外设中断,对应的中断ID是88(5632)或者 89(5732)。 目录 一、定时器计数流程 二、寄存器解析 1、EPIT1_CR 2…

骨传导耳机、运动耳机推荐:南卡OE开放式TWS耳机值得买吗?南卡OE测评

目前,如果说到骨传导耳机、蓝牙耳机想必大家都很熟悉,那你了解TWS耳机么? 如果说iPhone“重新定义”了智能手机,那么AirPods就重新定义了耳机——它“断”了耳机与手机/播放器间的连线,还将左右耳彼此间的连线彻底摒弃…

SimpleDateFormat显示24小时和12小时时间格式

public static void main(String[] args) throws Exception {MainTest1 mainTest1 new MainTest1();mainTest1.dateFormat();} yyyy-MM-dd HH:mm:ss格式显示的时间为:2017-06-12 18:01:06 yyyy-MM-dd hh:mm:ss格式显示的时间为:2017-06-12 06:01:06

二章:VMvare虚拟机的安装+VMvare安装winServer2008

目录 一、Vmware软件安装 二、Vmware软件注册 三、Vmware配置虚拟机-1 四、Vmware配置虚拟机-2 五、Vmware配置虚拟机-3 六、Vmware安装windows server 2008 一、Vmware软件安装 第一步 双击安装程序,点击下一步。 第二、三步 勾选接受许可,点击下一步。…

SAM【1】:Segment Anything

文章目录 前言1. Abstraction & Introduction1.1. Abstraction1.2. Introduction 2. Segment Anything Model2.1. Segment Anything Task2.1.1. Task2.1.2. Pre-training2.1.3. Zero-shot transfer 2.2. Segment Anything Model Methods2.2.1. Image Encoder2.2.2. Prompt …

python:并发编程(二十三)

前言 本文将和大家一起探讨python并发编程的实际项目:win图形界面应用(篇五,共八篇),系列文章将会从零开始构建项目,并逐渐完善项目,最终将项目打造成适用于高并发场景的应用。 本文为python并…

微信小程序快速入门【二】

微信小程序快速入门【二】 文章目录 微信小程序快速入门【二】👨‍🏫内容1:背景👨‍⚖️内容2:项目结构👨‍💻内容3:项目配置文件app.json👨‍🚀内容4&#x…

SpringBoot使用入门和案例实现

目录 1. 在pom.xml中添加依赖2. 编辑resources/application.properties3. 编写springboot的主程序4. 编写Controller程序5. IDEA本地测试6. 打包上传到服务器运行 1. 在pom.xml中添加依赖 步骤如下: 添加springboot的parent依赖添加springboot的starter-web依赖。…

osip开源库在windows平台上编译

背景 之前写过一篇关于sip协议栈选型的文章,最终采用了osip 2.3.6版本,文章中说明了为什么采用osip协议栈,以及为什么采用2.3.6版本。现在Linux上的产品已经基本满足需求了,接下来我们打算开发一套客户端和服务端对接&#xff0c…

电子邮件机器人和聊天机器人如何使您的客户支持受益?

当我们谈论客户支持中的人工智能时,通常会想到基于Web的聊天机器人。然而,现代人工智能的进步使电子邮件机器人成为客户支持自动化的下一个风口,使组织能够满足人们对于快速便捷的全渠道体验的期望。 有些人认为,与Facebook Mess…

“兆易创新杯”第十八届中国研究生电子设计竞赛有感

今年的电赛给我的感觉是时间真的紧张,可能是因为去年有疫情原因影响所以能准备的时间到七月份,今年不到月底就要全部出成品。我们团队一直在自研一款增强现实眼镜,从硬件设计到软件实现全部由我和另外两个小伙伴一起完成,所以就把…

matlab实现声音录制与左右声道分离

基础知识 1.MATLAB识别的常用语音信号类型: WAV格式 TXT格式 2.读取wav格式语音用函数:wavread 常用格式: ywavread(‘语音文件名’) [y,fs]wavread (‘语音文件名’) 用于读取语音,采样值放在向量y中,fs表示采样频率。 3.读取wav格式语音用…

动态代理与Spring Aop

动态代理 JDK 动态代理 使用JAVA反射包中的类和接口实现动态代理的功能,JAVA.lang.reflect包;主要是三个类: InvocationHandler,Method,Proxy; CGLIB动态代理,第三方工具类库,创建代理对象,cglib的原理是继…

城市内涝监测需要什么设备

近年来,随着城市化进程的加快,城市内涝问题愈发突出。强降雨、缺乏排水设施和过度的人类活动等因素,导致城市内涝灾害频发。内涝不仅给居民生活和财产安全带来威胁,还对城市基础设施和经济发展造成严重影响。 为了应对城市内涝灾…