Activiti基础入门

文章目录

  • Activiti项目搭建
    • 引用依赖项
    • Activiti服务初始化
    • 数据库配置
    • 配置文件
    • 测试demo
  • Activiti功能服务
    • RepositoryService:
    • RuntimeService:
    • TaskService:
    • HistoryService:
    • ManagementService:
    • DynamicBpmnService:
  • Activiti表分类

Activiti项目搭建

引用依赖项

<activiti.version>7.0.0.Beta1</activiti.version><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activiti.version}</version></dependency><!-- 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><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency>

Activiti服务初始化

@Configuration
public class ActivitiConfiguration {@Autowired@Qualifier("dataSource")private BasicDataSource DataSource;@Autowiredprivate PlatformTransactionManager platformTransactionManager;/*** 注册 activiti的配置信息*/@Bean("processEngineConfiguration")public SpringProcessEngineConfiguration getProcessEngineConfiguration(){SpringProcessEngineConfiguration configuration= new SpringProcessEngineConfiguration();configuration.setDataSource(DataSource);       // 添加数据源configuration.setTransactionManager(platformTransactionManager);    // 添加事务configuration.setDatabaseSchemaUpdate("true");  // 如果有表则不创建configuration.setDbHistoryUsed(true);   // 允许查看历史信息configuration.buildProcessEngine();  //执行创建25张表,如果已经创建就不再创建了// 自动部署 bpmn文件Resource[] resources = null;try {resources= new PathMatchingResourcePatternResolver().getResources("classpath*:bpmn/*.bpmn20.xml");} catch (IOException e) {e.printStackTrace();}configuration.setDeploymentResources(resources);return configuration;}/*** 注册 ProcessEngineFactoryBean*/@Beanpublic ProcessEngineFactoryBean processEngine(){ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();factoryBean.setProcessEngineConfiguration(getProcessEngineConfiguration());return factoryBean;}/*** 注册 RepositoryService*/@Beanpublic RepositoryService repositoryService() throws Exception{return processEngine().getObject().getRepositoryService();}/*** 注册 RuntimeService*/@Beanpublic RuntimeService runtimeService() throws Exception{return processEngine().getObject().getRuntimeService();}/*** 注册 TaskService*/@Beanpublic TaskService taskService() throws Exception{return processEngine().getObject().getTaskService();}/*** 注册 HistoryService*/@Beanpublic HistoryService historyService() throws Exception{return processEngine().getObject().getHistoryService();}
}

数据库配置

@Configuration
public class DataSourceConfiguration {@Bean("dataSource")public BasicDataSource getDruidDataSource(@Value("${spring.datasource.driver-class-name}")String driverClassName, // 数据库驱动程序@Value("${spring.datasource.url}")String url, // 数据库连接地址@Value("${spring.datasource.username}")String username, // 数据库的用户名@Value("${spring.datasource.password}")String password, // 数据库的用户名@Value("${spring.datasource.tomcat.min-idle}")int minIdle, // 最小维持连接数@Value("${spring.datasource.tomcat.max-active}")int maxActive // 最大连接数) {BasicDataSource dataSource = new BasicDataSource(); // 实例化DataSource子类对象dataSource.setDriverClassName(driverClassName); // 数据库驱动程序dataSource.setUrl(url); // 数据库的连接地址dataSource.setUsername(username); // 数据库用户名dataSource.setPassword(password); // 数据库密码dataSource.setMinIdle(minIdle); // 最小维持的连接数量dataSource.setMaxActive(maxActive); // 最大的连接数量return dataSource;}}

配置文件

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///activiti_dev?nullCatalogMeansCurrent=trueusername: rootpassword: 123456tomcat:max-active: 3min-idle: 1

测试demo

这是使用springboot项目创建的测试用例

import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.persistence.entity.HistoricFormPropertyEntity;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class BpmDemoApplicationTests {@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;@Autowiredprivate RepositoryService repositoryService;@Testvoid contextLoads() {}/*** @description: 创建审批* @author: gepengjun* @date: 2023/9/3 17:31* @param: []* @return: void**/@Testpublic void testCreateProcessInstance(){ProcessInstance test1 = runtimeService.startProcessInstanceByKey("test1");System.out.println("流程示例id:"+test1.getId());}/*** @description: 完成任务* @author: gepengjun* @date: 2023/9/3 17:31* @param:* @return: void**/@Testpublic void testComplete(){taskService.setVariable("37505","variable",true);taskService.complete("37505");}/*** @description: 设置流程实例变量* @author: gepengjun* @date: 2023/9/3 18:34* @param: []* @return: void**/@Testpublic void testProcessInstanceVariable(){runtimeService.setVariable("12506","taskTest","任务完成没有");}/*** @description: 获取流程实例变量* @author: gepengjun* @date: 2023/9/3 18:34* @param: []* @return: void**/@Testpublic void testGetProcessInstanceVariable(){Object taskTest = runtimeService.getVariable("30001", "taskTest");System.out.println("这是流程实例变量:"+taskTest.toString());}/*** @description: 在使用task服务获取流程实例变量* @author: gepengjun* @date: 2023/9/3 18:34* @param: []* @return: void**/@Testpublic void testTaskGetProcessInstanceVariable(){Object taskTest = taskService.getVariable("30005", "taskTest");System.out.println("使用Task服务获取流程实例变量:"+taskTest.toString());}/*** @description: 查询对应节点任务* @author: gepengjun* @date: 2023/9/3 17:31* @param: []* @return: void**/@Testpublic void testByUserName(){//根据节点名称获取指定流程实例的任务//List<Task> tasks = taskService.createTaskQuery().processInstanceId("37501").taskName("科长").list();//获取所有节点名称为“科长”的任务List<Task> tasks = taskService.createTaskQuery().taskName("高经理").list();for (Task task : tasks) {System.out.println("任务名称:"+task.getName());System.out.println("任务ID:"+task.getId());System.out.println("_______________________________");}}/*** @description: 删除流程模板* @author: gepengjun* @date: 2023/9/3 18:35* @param: []* @return: void**/@Testpublic void testRepositoryService(){repositoryService.deleteDeployment("1");}}

Activiti功能服务

RepositoryService:

RepositoryService 是 Activiti 中的一个服务接口,用于管理流程定义和部署的操作。通过 RepositoryService,可以执行以下一些常见的操作:

  1. 部署流程定义:使用 createDeployment() 方法创建一个新的部署对象,并通过 addInputStream()addClasspathResource() 等方法添加流程定义的资源文件,在最后使用 deploy() 方法将流程定义部署到引擎中进行使用。

  2. 查询流程定义:使用 createProcessDefinitionQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据流程定义的名称、版本号等进行查询。

  3. 获取流程定义资源:使用 getResourceAsStream() 方法可以获取流程定义的资源文件,例如获取流程图、流程定义的 XML 文件等。

  4. 删除流程定义:使用 deleteDeployment() 方法可以删除已部署的流程定义及其相关资源。

RuntimeService:

RuntimeService 是 Activiti 中的一个服务接口,用于管理流程实例的操作。通过 RuntimeService,可以执行以下一些常见的操作:

  1. 启动流程实例:使用 startProcessInstanceByKey() 方法根据流程定义的键启动一个新的流程实例,或者使用 startProcessInstanceById() 方法根据流程定义的ID启动流程实例。

  2. 查询流程实例:使用 createProcessInstanceQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据流程实例的ID、流程定义的Key等进行查询。

  3. 暂停和恢复流程实例:使用 suspendProcessInstanceById() 方法暂停指定ID的流程实例,使用 activateProcessInstanceById() 方法恢复暂停的流程实例。

  4. 查询任务:使用 createTaskQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据任务的ID、任务的负责人等进行查询。

  5. 设置和获取流程实例变量:使用 setVariable() 方法设置流程实例的变量,使用 getVariable() 方法获取流程实例的变量。

TaskService:

TaskService 是 Activiti 中的一个服务接口,用于管理任务的操作。通过 TaskService,您可以执行以下一些常见的任务相关的操作:

  1. 查询任务:使用 createTaskQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据任务的ID、负责人、所属流程实例等进行查询。

  2. 完成任务:使用 complete() 方法完成指定ID的任务,可以同时设置任务的执行人、变量等信息。

  3. 指派任务:使用 setAssignee() 方法将任务指派给指定的用户或组。

  4. 委派任务:使用 delegateTask() 方法将任务委派给其他人处理。

  5. 签收任务:使用 claim() 方法将任务签收,将当前用户设置为任务的负责人。

  6. 设置和获取任务变量:使用 setVariable() 方法设置任务的变量,使用 getVariable() 方法获取任务的变量。

  7. 创建附件和评论:使用 createAttachment() 方法创建任务的附件,使用 addComment() 方法添加任务的评论。

HistoryService:

HistoryService 是 Activiti 中的一个服务接口,用于管理历史数据的操作。通过 HistoryService,您可以执行以下一些常见的历史数据相关的操作:

  1. 查询历史流程实例:使用 createHistoricProcessInstanceQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据流程实例的ID、流程定义的Key等进行查询。

  2. 查询历史任务:使用 createHistoricTaskInstanceQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据任务的ID、所属流程实例、负责人等进行查询。

  3. 查询历史活动:使用 createHistoricActivityInstanceQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据活动的ID、所属流程实例、活动类型等进行查询。

  4. 查询历史变量:使用 createHistoricVariableInstanceQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据变量的名称、所属流程实例等进行查询。

  5. 查询历史表单数据:使用 createHistoricFormDataQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据表单的ID、所属流程实例等进行查询。

ManagementService:

ManagementService 是 Activiti 中的一个服务接口,用于管理引擎相关的操作。通过 ManagementService,您可以执行以下一些常见的引擎管理操作:

  1. 执行作业:使用 executeJob() 方法手动触发执行作业,例如定时任务、异步任务等。

  2. 暂停和恢复作业:使用 suspendJobById() 方法暂停指定ID的作业,使用 activateJobById() 方法恢复暂停的作业。

  3. 查询作业:使用 createJobQuery() 方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据作业的ID、作业的状态、作业的类型等进行查询。

  4. 查询引擎表:使用 getTableName() 方法获取指定实体类对应的数据库表名,使用 getTableCount() 方法获取指定表的记录数量。

  5. 强制执行数据库操作:使用 executeCommand() 方法执行自定义的数据库操作命令,例如 SQL 查询、SQL 更新等。

  6. 获取引擎配置信息:使用 getProcessEngineConfiguration() 方法获取当前引擎的配置信息,包括数据库连接信息、流程定义解析器等。

DynamicBpmnService:

DynamicBpmnService 是 Activiti 中的一个服务接口,用于动态修改流程定义和流程实例的相关内容。通过 DynamicBpmnService,您可以执行以下一些常见的动态流程操作:

  1. 动态修改流程定义:使用 changeDeploymentProcessDefinitionKey() 方法修改指定部署ID下流程定义的Key。

  2. 动态修改流程实例:使用 moveActivityIdTo() 方法将当前活动节点移动到指定的目标节点。

  3. 动态添加用户任务节点:使用 addUserTask() 方法在流程定义中动态添加用户任务节点。

  4. 动态删除节点:使用 deleteActivity() 方法删除指定节点及其关联的全部流转信息。

  5. 动态设置节点属性:使用 setActivityProperties() 方法设置指定节点的属性,如节点名称、节点描述等。

  6. 动态设置流程变量:使用 setProcessInstanceVariable() 方法设置流程实例的变量值。

Activiti表分类

在 Activiti 中,表用于存储与流程相关的数据和元数据。Activiti 从逻辑上将其分为五个类别。

  1. ACT_RE_*:包含“RE”表示 Repository,这些表存储了所有与 Activiti 流程定义和流程资源相关的数据和元数据。例如,这些表包括:

MN 流程

  • 定义的数据。
  • ACT_RE_DEPLOYMENT:保存 BPMN 文件和流程图等资源文件的数据。
  1. ACT_RU_*:包含“RU”表示 Runtime,这些表存储了流程运行期间产生的运行时数据。例如,这些表包括:

    • ACT_RU_TASK:保存当前待处理任务的数据。
    • ACT_RU_EXECUTION:保存流程实例和执行数据。
  2. ACT_ID_*:包含“ID”表示 Identity,这些表存储了用户、组和权限等身份验证相关的数据。例如,这些表包括:

    • ACT_ID_USER:保存用户的数据。
    • ACT_ID_GROUP:保存用户组的数据。
  3. ACT_HI_*:包含“HI”表示 History,这些表存储了流程实例的历史记录和统计数据。例如,这些表包括:

    • ACT_HI_PROCINST:保存流程实例的历史数据。
    • ACT_HI_TASKINST:保存任务实例的历史数据。
  4. ACT_GE_*:包含“GE”表示 Generic,这些表存储 Activiti 应用程序和一般工具使用的各种配置数据。例如,这些表包括:

    • ACT_GE_PROPERTY:保存 Activiti 数据和配置的属性数据。
      在这里插入图片描述

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

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

相关文章

基于Hugo 搭建个人博客网站

目录 1.环境搭建 2.生成博客 3.设置主题 4.将博客部署到github上 1.环境搭建 1&#xff09;安装Homebrew brew是一个在 macOS 操作系统上用于管理软件包的包管理器。类似于centos下的yum或者ubuntu下的apt&#xff0c;它允许用户通过命令行安装、更新和管理各种软件工具、…

医学案例|线性回归

一、案例介绍 某医师预研究糖尿病患者的总胆固醇和甘油三酯对空腹血糖的影响&#xff0c;某研究者调查40名糖尿病患者的总胆固醇、甘油三酯和空腹血糖的测量值如下&#xff0c;试根据上述研究问题作统计分析。 二、问题分析 本案例想要研究一些变量&#xff08;总胆固醇和甘油…

PostgreSQL问题记录:column “...“ does not exist

在PostgreSQL中&#xff0c;不论是在pgAdmin中&#xff0c;还是在命令行控制台里面&#xff0c;在SQL语句中表示属性值的总会遇到ERROR: column “…” does not exist这样的错误&#xff0c;比如下面的语句&#xff1a; 解决方案&#xff1a;将 “txt2txt” 的双引号改成单引…

UDP协议结构及其注意事项

UDP报文结构 UDP报文结构主要是由两个部分组成的&#xff1a;UDP头部和数据部分。 UDP头部 源端口号&#xff1a;16位字段&#xff0c;指示数据发送方的端口号。目的端口号&#xff1a;16位字段&#xff0c;指示数据接收方端口号。UDP报文长度&#xff1a;16位字段&#xff0…

房地产推广传单制作攻略,打造让人惊艳的电子传单

随着互联网的发展&#xff0c;传统的纸质传单已经逐渐被电子版传单所取代。电子版传单不仅可以节省成本&#xff0c;还可以更好地展示房产信息。在传统的设计软件中制作电子版传单需要一定的门槛&#xff0c;但是现在有了乔拓云网的后台&#xff0c;设计电子版房产H5传单变得简…

TCP机制之确认应答及超时重传

TCP因为其可靠传输的特性被广泛使用,这篇博客将详细介绍一下TCP协议是如何保证它的可靠性的呢?这得主要依赖于其确认应答及超时重传机制,同时三次握手四次挥手也起到了少部分不作用,但是主要还是由确认应答和超时重传来决定的;注意:这里的可靠传输并不是说100%能把数据发送给接…

无涯教程-Android - Absolute Layout函数

Absolute Layout 可让您指定其子级的确切位置(x/y坐标)&#xff0c;绝对布局的灵活性较差且难以维护。 Absolute Layout - 属性 以下是AbsoluteLayout特有的重要属性- Sr.NoAttribute & 描述1 android:id 这是唯一标识布局的ID。 2 android:layout_x 这指定视图的x坐标…

【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)

前言 今天&#xff0c;小编我也要进入计算机网络的整个内容&#xff0c;虽然这个计算机网络的内容在考研部分中占比比较小&#xff0c;有些人不把这一部分当成重点&#xff0c;这种想法是错误的。我觉得考研的这四个内容都是非常重要的&#xff0c;我们需要进行全力以赴的对待每…

Redis:StringRedisTemplate简介

&#xff08;笔记总结自b站黑马程序员课程&#xff09; 为了在反序列化时知道对象的类型&#xff0c;JSON序列化器会将类的class类型写入json结果中&#xff0c;存入Redis&#xff0c;会带来额外的内存开销。 为了减少内存的消耗&#xff0c;我们可以采用手动序列化的方式&am…

【数据结构】堆的基础功能实现与PriorityQueue

文章目录 &#x1f340;堆的插入与删除&#x1f6eb;堆的插入&#x1f6a9;代码实现&#xff1a; &#x1f6ec;堆的删除 &#x1f38b;堆的常见习题&#x1f388;习题一&#x1f388;习题二&#x1f388;习题三 &#x1f384;PriorityQueue&#x1f431;‍&#x1f453;Priori…

leetcode 92.反转链表II dummy节点的应用

题目 方法 dummy节点 链表的第一个结点&#xff0c;因为没有前驱结点&#xff0c;存在同时删除前驱和后继的情况&#xff0c;这时候我们需要人为构造dummy节点——人为制造出来的第一个结点的前驱结点&#xff0c;也就是说&#xff0c;在可能操作head节点时&#xff0c;我们可…

基于Matlab分析的电力系统可视化研究

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

4.正则提取html中的img标签的src内容

我们以百度贴吧的1吧举例 目录 1 把网页搞下来 2 收集url 3 处理url 4 空的src 5 容错 6 不使用数字作为文件名 7 并不是所有的图片都用img标签表示 8 img标签中src请求下来不一定正确 9 分页 1 把网页搞下来 搞下来之后&#xff0c;双击打开是这样的 2 收…

MySQL5.7慢查询实践

总结 获取慢查询SQL 已经执行完的SQL&#xff0c;检查慢查询日志&#xff0c;日志中有执行慢的SQL正在执行中的SQL&#xff0c;show proccesslist;&#xff0c;结果中有执行慢的SQL 慢查询日志关键参数 名称解释Query_time查询消耗时间Time慢查询发生时间 分析慢查询SQL e…

Linux开源防病毒引擎ClamAV

ClamAV官方地址&#xff1a;https://www.clamav.net 它支持Linux、BSD、windows、Mac OS X等系统。 在CentOS 8&#xff08;Tencent OS 3.1&#xff09;安装非常便利&#xff0c;可以使用yum。 yum install clamav 安装成功&#xff0c;就可以使用它进行病毒扫描检查了。 c…

ArcGIS Engine10.2 Setup 报错

00 问题重述 当我尝试安装ArcGIS Engine时弹出错误&#xff1a;ArcGIs 10,2 Engine cannot be installed on your machine.ArcGIs 10,2 Engine requires Microsoft ,NET Framework 3.5sp1, Which has not been found on your system, If you want to download and install Mic…

算法训练day34|贪心算法 part03(LeetCode 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果(处理一边再处理一边))

文章目录 1005.K次取反后最大化的数组和思路分析代码实现 134. 加油站暴力方法贪心方法 135. 分发糖果(处理一边再处理一边)思路分析代码实现思考总结 1005.K次取反后最大化的数组和 题目链接&#x1f525; 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#…

Android样本Repack重打包检测思路

1. 什么是Android样本重打包&#xff0c;为什么要检测重打包 &#xff08;1&#xff09;apk是zip&#xff0c;很容易做repack &#xff08;2&#xff09;repack后&#xff0c;被抄袭&#xff0c;redirect ad&#xff0c;或者插入malicious payloads &#xff08;3&#xff09;…

机器学习_特征工程_特征数据的评价标准

本文主要从 单特征分析&#xff0c;多特征筛选&#xff0c;特征监控&#xff0c;外部特征评估的几个方面对特征数据进行阐述。 来源 &#xff1a; 特征筛选_特征覆盖度怎么算_adamyoungjack的博客-CSDN博客 1. 单特征分析 1.1 简介 好特征可以从几个角度衡量&#xff1a;覆…

springmvc5.x-mvc实现原理及源码实现

上文&#xff1a;spring5.x-声明式事务原理及源码实现 系列文章&#xff1a; spring5.x-声明式事务原理及源码实现 spring5.x-AOP实现原理及源码分析 spring5.x-监听器原理及源码实现 spring5.x-解决循环依赖分析 spring5.x-IOC模块源码学习 spring5.x介绍及搭配spring源码阅读…