Activiti 工作流引擎

news2024/11/23 3:23:09

一、什么是工作流?

工作流:指业务过程的部分或整体在计算机应用环境下的自动化。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分,后者是普遍研究一个群体如何在计算机的帮助下实现协同工作的。

工作流主要解决的主要问题是:为了实现某个业务,利用计算机在多个参与者之间按照预定规则自动传递文档,信息或任务。

工作流管理联盟(WFMC)对工作流给出定义为:工作流是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。

Activiti

Activiti也是一种工作流引擎,activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN进行定义,业务流程按照预先定义的流程执行,实现了系统的流程由activiti进行管理,减少业务系统变更进行系统升级改造的工作量,从而提高系统的健壮性,同时减少系统开发维护成本。

BPMN(Business Process Model AndNotation)- 业务流程模型和符号 是由BPMI开发的一套标准的业务建模符号,使用BPMN提供的符号可以创建业务流程。

二、使用步骤

1、部署activiti

Activiti是一个工作流引擎(其实就是一堆jar包API),业务系统访问(操作)activiti的接口,就可以方便的操作流程相关数据,这样就可以把工作流环境与业务系统的环境集成在一起。

2、流程定义

.bpmn文件就是业务流程定义文件,通过xml定义业务流程

3、流程定义部署

activiti部署业务流程定义(.bpmn文件)

activiti执行把流程定义内容存储在数据库中

4、启动一个流程实例
5、用户查询代办任务(task)
6、用户办理任务
7、流程结束

一、导入依赖

<!-- bpmn 模型处理 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-model</artifactId>
        <version>${activiti.version}</version>
    </dependency>
<!-- bpmn 转换 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-converter</artifactId>
        <version>${activiti.version}</version>
    </dependency>
 <!-- bpmn json数据转换 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-json-converter</artifactId>
        <version>${activiti.version}</version>
    </dependency>
     <!-- bpmn 布局 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-layout</artifactId>
        <version>${activiti.version}</version>
    </dependency>
     <!-- activiti 云支持 -->
    <dependency>
        <groupId>org.activiti.cloud</groupId>
        <artifactId>activiti-cloud-services-api</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.40</version>
    </dependency>

调用activiti的工具类,生成activiti需要的数据库表。

直接使用activiti提供的工具类processEngines,会默认读取classpath下的activiti.cfg.xml文件,读取其中数据库配置,创建processEngine,在创建ProcessEngine时会自动创建表。

二、生成acitivti需要的数据库表

//创建
        ProcessEngine processEngine=configuration.buildProcessEngine();
        processEngine.close();

三、xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 默认id对应的值 为processEngineConfiguration -->
    <!-- processEngine Activiti的流程引擎 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///activiti"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="root"/>
        <!-- activiti数据库表处理策略 -->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

四、表结构介绍

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

act_ru:“RU”表示runtime,这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据,Activiti只在流程实例执行过程中保存这些数据,结束时会删除记录。

act_hi:“HI”表示history,这些表包含历史数据,比如历史流程实例,变量,任务等

act-Ge:“GE”表示general,通用数据,用于不同场景下;

五、相关表

act_evt_log

act_ge_bytearray:通用的流程定义和流程资源,用来保存部署文件的大文本数据

保存流程定义图片和xml。Serializable(序列化)的变量,即保存多有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他流程无关的文件也一起部署在该表中,会造成一些错误(可能导致流程定义无法删除)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgy3UMB3-1671076756330)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202091034497.png)]

act_ge_property:系统相关属性。属性关系表。存储这个流程引擎级别的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LLwDrVjx-1671076756331)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202091440069.png)]

act_hi_actinst:历史节点表,历史活动信息。这里记录流程流转过的所有节点,与hi_taskinst不同的是,taskinst只记录usertask内容。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KmM4T5c4-1671076756332)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202092153054.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWEdN9sS-1671076756332)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202092217404.png)]

act_hi_attachment:历史的流程附件信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHnEZPAI-1671076756332)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202092513019.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MfIu2JFt-1671076756333)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202092531321.png)]

act_hi_comment:历史审批意见表

用于保存流程审核的批注信息。一般我们审批任务时,都会填写审批意见、审批时间、审批人等信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgCEnzTF-1671076756333)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202092916698.png)]

type_:意见类型记录,为comment时为处理意见,类型:event(事件),comment(意见)

action:行为类型,为addcomment时,为处理意见

message:处理意见,用于存放流程产生的信息,比如审批意见

full_msg:全部信息。

act_hi_detail:历史详细信息
act_hi_identitylink:历史流程人员表,任务参与者数据表,主要存储历史节点参与者的信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9u09VC0-1671076756333)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202094004778.png)]

act_hi_procinst:历史流程实例信息(核心表)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liLiBqBR-1671076756334)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202094452814.png)]

act_hi_taskinst:历史任务流程实例信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFw9L8HM-1671076756334)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202094524994.png)]

act_hi_varinst:历史流程运行中的变量信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqJhff0H-1671076756334)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202095002924.png)]

act_id_group:用户组表,用来存储用户组信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xVQUzGXC-1671076756335)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202095236896.png)]

act_id_info:用户扩展信息表
act_id_membership:用户用户组关联表,用来保存用户的分组信息
act_id_user:用户信息表
act_procdef_info:
act_re_deployment:部署信息表,用来存储部署时需要持久化保存下来的信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WFh7ljXR-1671076756335)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202095910263.png)]

act_re_model:流程设计模型表,创建流程的设计模型时,保存在该数据表中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LE0vYLqi-1671076756335)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202100410558.png)]

act_re_procdef:流程定义:解析表,
流程解析表,解析成功了,在该表中保存一条记录。业务流程定义数据表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlJwlGUZ-1671076756336)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202102624657.png)]

act_ru_deadletter_job
act_ru_event-subscr:运行时事件
act_ru_execution:运行时流程创建实例,核心,我的代办任务查询表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qGbxyHW9-1671076756336)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202103500771.png)]

act_ru_identitylink:运行时用户身份联系,主要存储当前节点参与者的信息,任务参与者数据表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SdGmYp7t-1671076756336)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202103625887.png)]

act_ru_job:运行中的任务,运行时定时任务数据表
act_ru_task:运行时任务数据表,(执行中实时任务)代办任务查询表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7FNWJdi-1671076756336)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202104541399.png)]

act_ru_timer_job
act_ru_variable:运行时流程变量数据表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6kRti0u-1671076756337)(C:\Users\28344\AppData\Roaming\Typora\typora-user-images\image-20221202104812010.png)]

六、流程引擎配置类

流程的引擎配置类:(ProcessEngineConfiguration),通过ProcessEngineConfiguration可以创建工作流引擎ProcessEngine,常见的方法如下两种:

1、StandaloneProcessEngineConfiguration

使用StandaloneProcessEngineConfigurationActiviti可以单独运行,来创建ProcessEngine,Activiti会自己处理事务。配置文件方式:通常在activiti.cfg.xml配置文件中定义一个id为 processEngineConfiguration 的bean,见环境搭建模块,就是使用这种方式进行配置的。
2、SpringProcessEngineConfiguration

通过org.activiti.spring.SpringProcessEngineConfiguration 与Spring整合。

七、Service服务接口

service名称service作用功能描述
RepositoryServiceactiviti的资源管理类activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机
RuntimeServiceactiviti的流程运行管理类Activiti的流程运行管理类,可以从这个类中获取很多关于流程执行相关的信息
TaskServiceactiviti的任务管理类Activiti的任务管理类,可以这个类中获取任务的信息
HistoryServiceactiviti的历史管理类activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据,比如获取实例启动时间,任务的参与者,完成任务的时间,每个实例的执行路径,这个服务主要通过查询功能来获得这些数据。
ManagerServiceactiviti的引擎管理类activiti的引擎管理类,提供了对activiti流程引擎的管理和维护功能,这些功能不能在工作驱动的应用程序中使用,主要对于activiti系统的日常维护。

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

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

相关文章

win7无损合并分区,win7合并磁盘分区

电脑的操作系统是win7的&#xff0c;如果磁盘分区太小或者说磁盘分区不合理&#xff0c;需要对磁盘分区重新分区&#xff0c;其中合并磁盘分区就是解决方法之一&#xff0c;那么&#xff0c;有没有关于win7无损合并分区的操作方法呢&#xff1f; 一、利用Windows自带的功能来合…

Matlab|基于BP神经网络进行电力系统短期负荷预测

目录 摘要 一、电力负荷数据导入 二、输入输出数据归一化 三、建立和训练BP神经网络 四、 使用测试数据进行负荷预测 五、Matlab代码实现 摘要 使用BP神经网络实现简单的电力负荷回归预测任务。主要的步骤为&#xff1a;导入数据、数据归一化、建立BP神经网络、训练BP神…

熹乐科技范维肖CC:基于开源 YoMo 框架构建“全球同服”的 Realtime Metaverse Application

前言 在「RTE2022 实时互联网大会」中&#xff0c;熹乐科技创始人 & CEO 范维肖CC 以《基于开源 YoMo 框架构建“全球同服”的 Realtime Metaverse Application》为题进行了主题演讲。 本文内容基于演讲内容进行整理&#xff0c;为方便阅读略有删改。 大家好&#xff0c;…

chatGPT的爆火,是计算机行业这次真的“饱和”了?

近日&#xff0c;chatGPT这一生成式AI爆火&#xff0c;这款号称神仙级别的自动语言生成式AI发布短短5天内&#xff0c;就吸引了100万用户&#xff0c;在官方描述中&#xff0c;chatGPT是一个“可以连续回答问题、承认自己的错误、挑战不正确的前提并拒绝不适当的要求”的对话模…

【GO】 K8s 管理系统项目[API部分--Deployment]

K8s 管理系统项目[API部分–Deployment] 1. 实现接口 service/dataselector.go package serviceimport ("sort""strings""time"appsv1 "k8s.io/api/apps/v1"corev1 "k8s.io/api/core/v1" )// dataselector 用于排序,过滤…

第11讲:vue脚手架集成ElementUI

一、创建vue路由项目并添加ElementUI支持 ElementUI官方网站&#xff1a;ElementUI组件 创建路由项目请参考&#xff1a;路由开发 使用如下命令集成ElementUI npm i element-ui -S在src/main.js文件中引用ElementUI import Vue from vue import App from ./App.vue import …

创建第一个QT程序demo

双击Qt Creator 9.0.0 (Community)图标&#xff0c;打开软件。该图标所处位置为&#xff08;如果是默认安装到C盘下面的话&#xff09;&#xff1a;C:\Qt\Tools\QtCreator\bin\qtcreator.exe 或者从开始菜单栏启动&#xff08;开始菜单栏的启动图标本质上也是一个快捷方式&…

记录windows上的VSCODE 远程到linux编译代码机器上的一些问题

设置windows SSH 到linux时免密码登录的方法&#xff1a; 将C:\Users\Administrator.ssh\id_rsa.pub中的公钥字符串复制&#xff0c;追加到linux ~/.ssh/authorized_keys文件中。 问题&#xff1a; rootlocalhost:~/.vscode-server/bin/6261075646f055b99068d3688932416f2346d…

[附源码]Node.js计算机毕业设计服装创意定制管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【Redis技术探索】「底层架构原理」探索分析服务数据同步持久化机制

&#x1f4da;背景介绍 ✒️ Redis数据恢复的介绍 通常情况下redis的数据全部存储在内存中&#xff0c;数据库一旦故障发生重启数据会全部丢失&#xff0c;持久化功能在于能够有效地避免因进程退出造成的数据丢失问题&#xff0c;在下次重启时利用之前持久化的文件即可实现数据…

【学习打卡】ZFNet深度学习图像分类算法

文章目录引言可以学到什么为什么叫ZFNetZFNet的网络结构简介方法&#xff1a;可视化反卷积反池化反激活反卷积训练细节大小裁剪层可视化特征可视化第 1 层第 2 层两边的对应关系更深的层第 3 层第 4 层第 5 层特征演化特征不变性实验简介图的分析模型改进&#xff1a;AlexNet局…

【愚公系列】2022年12月 Elasticsearch数据库-ELK添加中文分词器插件(三)

文章目录前言1.IK分词器2.pingying分词器一、ELK添加中文分词器插件1.IK分词器测试1.1 文件准备1.2 测试2.pingying分词器测试2.1 文件准备2.2 测试2.2.1 单个测试2.2.2 多个测试2.2.3 短语查询测试2.2.3.1 medcl2索引2.2.3.2 medcl3索引前言 分词器的作用是把一段文本中的词按…

Python学习基础笔记五十一——学校管理系统

完成一个作业&#xff1a; 1. 创建北京、上海 2 所学校 2. 创建linux , python , go 3个课程 &#xff0c; linux\py 在北京开&#xff0c; go 在上海开 3. 课程包含&#xff0c;周期&#xff0c;价格 4. 班级关联课程、讲师 5. 创建学员时&#xff0c;选择学校&#xff0c;关联…

从零开始搭建CentOS7虚拟机系统、MySQL5.7和Redis3服务

CentOS7搭建MySQL和Redis服务 为什么不直接搭建高版本的呢&#xff1f; 因为有些公司的环境就是低版本的&#xff0c;这些低版本的环境也需要学会如何搭建。 准备工作 搭建一个CentOS7系统 第一步&#xff1a;先下载一个CentOS7的iso文件 点击直接下载&#xff1a;https:…

Odoo丨如何改造Odoo原生form表单使其更好看

文章目录前言一、原生表单实现方式二、问题发现与分析1.项目中遇到问题2.问题具体分析三、具体解决方法第一步&#xff1a;把Span变成输入框第二步&#xff1a;改写_renderFieldWidget前言 Odoo作为快速搭建系统的框架&#xff0c;我们在利用它便捷高效功能的同时&#xff0c;…

踩坑记录:C++调用matlab生成的动态链接库

任务类别&#xff1a; 通常出现在项目中&#xff0c;使用 Matlab 设计算法&#xff0c;最后应用于 Qt 的应用程序中。 配置Vs2008环境&#xff1a;(PS:这里应该也同样能应用于其它版本) 一. 设置matlab库目录 选择“可执行文件”下拉框&#xff0c;添加&#xff1a;" ##…

【Redis】Docker 安装 Redis

Docker 安装 Redis 1、安装镜像 docker pull redis docker images docker run -d -p 6379:6379 redis docker ps docker exec -it 容器ID bash 2、验证Redis容器安装结果 redis- clipingset k1 v1 get k1 3、使用Redis需修改配置文件redis.conf。可通过&#xff1a;方法一&…

【Redis】Redis 内存淘汰策略

文章目录概述数据淘汰策略不进行数据淘汰策略进行数据淘汰策略在设置了过期时间的数据中进行淘汰在所有数据范围内进行淘汰查看与配置数据淘汰机制查看 Redis 的数据淘汰机制修改 Redis 的数据淘汰机制方法一方法二浅谈 LRU 算法和 LFU 算法LRU 算法LFU 算法概述 当我们往 Red…

勒索病毒防御 运维安全管控 | 某烟草公司数据安全建设实践

对于烟草行业而言&#xff0c;加快数字化转型是建设现代化烟草经济体系、实现高质量发展的重要支撑。但新技术的普及与应用&#xff0c;在给烟草行业带来便利、创造价值的同时&#xff0c;也使行业面临的数据安全威胁与日俱增。 在数据安全监管合规持续升级的大背景下&#xff…

《自己动手写CPU》学习记录(9)——第7章/Part 2

目录 引言 致谢 流水线暂停 指令说明 madd、maddu、msub、msubu 设计 宏定义文件 程序计数器模块 译码模块 执行模块 访存模块 HI LO 寄存器模块 通用寄存器模块 流水线控制模块 程序ROM MIPS32顶层 MIPS32 SOPC 仿真 仿真程序 TESTBENCH 仿真结果 引言 …