![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Activiti
欧阳田
生活没有对与错,一路爬行。
展开
-
Activiti7.0进阶学习(八):Activiti抛出了PersistenceException
背景记录activiti为什么会抛出PersistenceException过程操作过程activiti的审批流程中的某个节点是或签节点。两个审批人同时进行同意操作(complete)这个异常是必出现的。错误信息2020-08-05 15:20:27.904 ERROR [http-nio-9011-exec-9] o.activiti.engine.impl.interceptor.CommandContext - Error while closing command c原创 2020-08-07 19:28:55 · 927 阅读 · 8 评论 -
Activiti7.0进阶学习(七):Activiti抛出了OptimisticLockingException
背景记录在使用activiti过程中,抛出了异常OptimisticLockingException过程操作过程activiti的流程定义节点是一个会签节点,此节点审批人有多个。当两个审批人同时进行complete操作的时候,会抛出并发错误。这是一个必现的问题。只要同一个节点的两个审批人,同时点击同意(complete)操作就会发生。产生结果如下分析这是并发操作导致的问题。因此需要加锁。主要是activiti在设计的时候,就确定了,同一个审批实例下同时只能有一个线程处理任务原创 2020-08-07 19:14:22 · 3902 阅读 · 1 评论 -
Activiti7.0进阶学习(六):Activiti的乐观锁实现过程
背景学习activiti的乐观锁实现过程,可以先理解complete工作过程在多个线程同时操作同一个taskId的时候,activiti是怎么解决并发问题的?过程activiti使用乐观锁(Optimistic Locking)做的并发控制一旦并发冲突(多个线程同时操作同一个taskId的时候)发生的时候,一个异常OptimisticLockingException就会被抛出来,同时事务也将回滚。检测到冲突发生的时候,其实是多个线程同时对同一个数据进行写操作。activiti的默认表原创 2020-08-07 18:58:11 · 2430 阅读 · 3 评论 -
Activiti7.0进阶学习(五):Activiti在执行complete操作时发生了什么?
背景在activiti中,每个节点(user task)都可以理解为activity。 那这个activity是怎么执行的?也可以理解为程序代码在执行complete时,发生了什么?什么又是 Asynchronous Continuations?为什么需要Asynchronous Continuations?过程complete流程进入到activity时,"TAKE"监听器就会被调用。activity自己调用"START"监听器。activity的行为将会被执行。当activ原创 2020-08-07 18:21:49 · 7123 阅读 · 0 评论 -
Activiti7.0进阶学习(四):Activiti的命令拦截器
背景《疯狂工作流讲义》:“Activiti提供了命令拦截器功能,外界对Activiti流程中各个实例进行的操作,实际可以看作对数据进行的相应操作,在此过程中,Activiti使用了设计模式中的命令模式,每一个操作数据库的过程,均可被看着一个命令,然后交由命令执行者去完成。除此之外,为了能让使用者可以对这些命令进行相应的拦截(进行个性化处理),Activiti还使用了设计模式中的责任链模式,从而使用者可以添加相应的拦截器(责任链模式中的处理者)”。理解了命令模式和责任莲模式,其实就可以大致理解Ac原创 2020-06-07 18:38:21 · 1646 阅读 · 10 评论 -
Activiti7.0理论学习(四):流程变量
背景什么是流程变量?流程变量的数据类型?全局流程变量与局部流程变量的区别?流程变量的使用场景是什么?过程什么是流程变量我们把像这样的写法叫做流程变量。${holiday.num} 、 ${holiday.applyName} 、 ${assignee0}。然后我们在启动一个流程实例的时候,把值给放进去。对应的占位符就取得自己对应的值。流程变量是一个占位符,它等待启动流程实...原创 2020-05-05 07:17:00 · 975 阅读 · 0 评论 -
Activiti7.0进阶学习(三):assignee的值用UEL的POJO实现
背景POJO, 这个概念其实来自Spring中,叫做增强型Java对象。因为Spring是非侵入式编程模式,我们开发者自定义的实体,既可以变成POJO类型的实体服务于Spring框架,这个变成的POJO类型的实体,在其他地方使用也没有任何影响。其实就是这样的形式${holiday.num}, 表达式会调用一个getNum()方法。其实我们的JSP中也有这样的EL表达式知识。Mybatis的中...原创 2020-05-04 23:03:59 · 1912 阅读 · 0 评论 -
Activiti7.0进阶学习(二):assignee的值用监听器实现
背景监听器分配,分配的是什么,是任务执行人的分配。Event(Create、Assignment、Delete、All)Create: 任务创建后触发Assignment:任务分配后触发Delete: 任务完成后触发All: 所有事件发生都触发过程创建流程图,需要添加自定义的listener项目目录及其MyTaskListener内容部署。如果部署了同一个key的流程...原创 2020-05-02 22:41:35 · 1328 阅读 · 0 评论 -
Activiti7.0进阶学习(一):assignee的值用UEL实现
背景UEL(Unified Expression Language)即统一表达式语言,activiti支持两个UEL表达式:UEL-value和UEL-method过程bpmn流程图展示bpmn文件转成xml文件展示流程定义的部署代码演示实例化一个流程实例(此时act_ru_identitylink是没有任何关于此流程定义的数据的,也不难理解,因为此时没有任何流程实例)...原创 2020-05-02 21:43:44 · 1776 阅读 · 3 评论 -
Activiti7.0实战学习(十二):单个流程实例的挂起与激活
背景使用场景?假如现在公司同时有50人请假。其中,30人已经申请通过,还有20人在流程中流转。想法就是,不能再有人请假了,于是把这20人的流程实例挂起。等到前面30人有一部分人到岗了,然后又激活20人中的一部分。过程代码演示单个流程实例挂起控制台打印代码演示单个流程实例激活(与上面测试代码一致,只需要在重新执行一次)控制台打印假如现在流程实例已经被挂起了...原创 2020-05-02 18:09:35 · 898 阅读 · 0 评论 -
Activiti7.0实战学习(十一):流程定义的挂起与激活
背景要注意,这里说的是流程定义的概念,不是流程实例。想,如果一个流程定义被挂起了与被激活了,表达了什么含义?想,为什么流程定义被会挂起,又为什么会被激活?过程流程实例可以理解为流程定义这个class下的无数个Java对象。流程定义被挂起,就是此流程定义下的所有流程实例不允许继续往后流转了,就被停止了。流程定义被激活,就是此流程定义下的所有流程实例允许继续往后流转。...原创 2020-05-02 17:28:51 · 2175 阅读 · 0 评论 -
Activiti7.0实战学习(十):业务系统与Activiti工作流引擎关联上关系
背景启动流程实例时,给Activiti添加businessKey过程代码演示上图中的1001是业务系统中的,某个唯一业务标识。比如请假单ID,调薪单ID。结果看上图中圈中的信息即可。应用就是当某个负责人进行任务处理的时候,可以拿到唯一标识businessKey,然后找到businessKey对应的记录信息,通过这条信息拿到更多信息,然后进行业务逻辑处理即可。小结...原创 2020-05-02 16:30:17 · 1658 阅读 · 0 评论 -
Activiti7.0理论学习(三):我们的业务逻辑表是怎么关联上Activiti提供的默认表的?
背景bussinessKey字段在哪个表中?act_ru_execution表流程实例ID与请假单ID的一个关系?是谁已经关联上了这个请假单,那么他就再流程实例过程中了。一定要独立理解。业务系统只是把一个业务的唯一标识给到流程实例,而这个工作流在流转在状态变化,而跟这个变化相关的业务也一直在这个实例流程中。这样,我们业务数据就是自己去设计表结构去存储。过程图解原理过程说明...原创 2020-05-02 12:54:59 · 1577 阅读 · 0 评论 -
Activiti7.0实战学习(九):查询历史表中的数据
背景我们可以先只是生成数据库中的表,然后在进行流程定义的部署。我们也可以不用先生成数据库中的表,而直接进行流程定义的部署,也会生成表结构,并且会插入流程部署相关的必要的信息。流程定义部署后,数据库中的历史相关的表也是没有任何数据记录信息的。需要等到task在动态地流转,然后会相应地生成历史数据记录信息,最后我们才能查询出具体的数据信息。过程我们再走一次这个流程部署 假如我们...原创 2020-05-02 12:12:50 · 2461 阅读 · 0 评论 -
Activiti7.0实战学习(八):与Springboot2.1集成过程
背景记录Activiti7.0与Springboot2.1集成操作过程。熟悉一些常规Activiti提供的一些API。过程在idea中创建一个Maven项目给pom.xml文件添加依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4....原创 2020-05-02 07:55:24 · 2212 阅读 · 0 评论 -
Activiti7.0实战学习(七):流程定义信息之删除
背景数据库中要有必要的数据信息。比如流程定义表,流程定义的部署,流程实例的启动。根据ID删除,根据的是act_ru_deployment表的id进行删除的。这个删除操作影响了哪些表中的数据记录呢?流程定义信息的删除,操作的是act_ru_deployment表。是因为我们部署流程定义的信息的时候,其实就是把bpmn中的数据写到数据库中而已。因此,它删除的时候,没有找act_ru_proc...原创 2020-05-02 06:25:33 · 2900 阅读 · 1 评论 -
Activiti7.0实战学习(六):流程定义信息之查询
背景工作流引擎Activiti的概念:流程定义,流程部署,流程实例。流程定义的信息增删改查需要熟悉起来。每一个流程定义被部署到数据中的时候,都有自己唯一的key,我们可以手动设置,也可以让Activiti默认生成。过程代码逻辑演示控制台结果打印 数据库表act_ru_procdef中数据总结就是对一张已经部署好的流程定义的表,进行一个查询操作。小结...原创 2020-05-02 00:16:07 · 1195 阅读 · 2 评论 -
Activiti7.0总结(一):基础知识
背景整理和总结Activiti相关的基础知识。过程工作流的基本概念理解自动创建默认表Activiti自己提供默认表结构,使用这只需要按照使用规则就行。就可以完成流程定义的创建,流程定义的部署,流程实例的启动。然后,我们通过Activiti提供的API去操作数据库中的表即可。去查询数据,去删除数据,去完成任务等等一些列操作。完全可以理解为Activiti是支持工作流的特殊的O...原创 2020-05-01 23:35:34 · 4526 阅读 · 2 评论 -
Activiti7.0实战学习(五):用户处理任务后表中数据做了哪些变化?
背景查询出指定某个用户的任务列表根据任务的ID进行任务处理看任务处理后,表中发生了哪些变化?过程处理任务代码逻辑数据库表变化act_ru_task表说明:由于sanding已经填写了请假申请单,因此activiti把表中原来那条记录给删除了。又新插入了一条了数据。而这条数据就是部门经理这个负责人进行请假单审批了。而这里字段ASSIGNEE为什么为null,是...原创 2020-05-01 22:23:29 · 2168 阅读 · 13 评论 -
Activiti7.0实战学习(四):查询任务列表
背景查询指定某个用户的任务列表。想:用户是怎么来的?就是我们在页面创建流程图的时候,添加的任务负责人。数据库存的是用户的唯一标识,可以是用户名也可以是用户id,反正全局唯一就行。过程测试代码逻辑这里任务负责人是:sanding是手动去操作数据库添加的。实际应用场景,是构建流程图的时候,选择的。数据库表截图act_ru_task表内容分析。此任务负责人是sand...原创 2020-05-01 21:09:38 · 2926 阅读 · 0 评论 -
Activiti7.0实战学习(三):流程实例的启动过程
背景流程定义(就是我们画的bpmn图,也就是bpmn文件,本身是xml文件)流程部署(就是把流程定义的内容持久化到数据库中)流程定义的部署流程实例,流程定义好比是java中的一个类,而流程实例好比java中实例对象。一个流程定义可以对应多个流程实例。过程流程实例启动代码逻辑说明注意给流程定义部署的时候,可以设置表结构中的字段信息内容,也可以不设置。比如字段key...原创 2020-05-01 17:57:11 · 3046 阅读 · 4 评论 -
Activiti7.0实战学习(二):流程定义的部署
背景idea中安装actiBPM插件。bpmn文件其实就是xml文件。bpmn文件是怎么转换成png文件。流程定义的部署,部署了什么?有哪些静态文件,部署过程中又涉及到哪些表?过程准备工作在idea中显示的bpmn文件(因为有actiBPM插件,所以显示如下图形,其实本身还是xml文件)在ideab中把bpmn文件转成xml的文件的内容(直接修改扩展名即可)<...原创 2020-05-01 16:49:09 · 2626 阅读 · 2 评论 -
Activiti7.0理论学习(二):逻辑架构体系
背景理解Activiti设计的逻辑架构体系。过程逻辑架构图逻辑架构描述通过入口配置文件activiti.cfg.xml,得到ProcessEngineConfiguration实例。由ProcessEngineConfiguration实例得到ProcessEngine实例。通过ProcessEngine实例得到Activiti提供所有接口服务。RepositoryS...原创 2020-05-01 15:10:06 · 1525 阅读 · 0 评论 -
Activiti7.0理论学习(一):表名称规范说明。
背景记录Activiti工作流引擎表名称规范的一些相关知识。过程有哪些表说明ACT_RE_*: 'RE’表示repository。这个前缀的表包含了流程定义和流程 静态资源(图片、规则等等)ACT_RU_*:'RU’表示runtime。这些运行时的表,包含流程实例,认为,变量,异步任务等运行中的数据。Activiti只在流程实例执行过程中保持这些数据,在流程结束时就会删除...原创 2020-05-01 11:26:32 · 1532 阅读 · 0 评论 -
Activiti7.0实战学习(一):自动创建默认表
背景Activiti启动时,创建表的过程是怎样操作的?Activiti7.0默认创建了多少张表?过程创建一个Maven项目配置pom.xml文件内容<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs...原创 2020-05-01 11:04:27 · 5083 阅读 · 0 评论 -
Activiti7.0学习前的基础知识
背景什么是工作流?工作流引擎是哪个?Activiti的核心工作机制是什么?Activit的核心工作机制实现的过程是什么?过程工作流工作的一个流程。事务发展的一个变更过程。关键点:我们需要想办法把流程状态信息持有化。举例:请假流程员工申请 -> 部门经理 -> 总经理 -> 人事存档如何来解决这个请假流程变更的问题?传统方式。请假条的传递实现。人要移动...原创 2020-05-01 10:31:46 · 1551 阅读 · 0 评论