activity工作流一个SQL高消耗的问题

activity工作流一个SQL高消耗的问题

工作流中运行时任务节点表ACT_RU_TASK,如果在应用场景中,并没有使用子任务的情况,那么表中数据的parent_task_id_ 字段生成的数据均为空。在运行时,如果节点发生变动,activity的机制是删除元任务节点数据并生成新的任务节点数据。在删除时,会用task_id,去检索一次该任务是否存在子任务节点数据。
在这里插入图片描述
那么将会产生这个SQL执行:select * from ${prefix}ACT_RU_TASK where PARENT_TASK_ID_ = #{parameter}
在这里插入图片描述
由于parent_task_id_ 为空列,当该表数据较大时,该SQL将会耗时比较严重。

:本人使用的activity版本是5.15.1,其他版本是否也有这个问题暂未研究

解决办法

  1. 使用拦截器拦截该SQL,未试;
  2. activiti通过扩展点重写节点行为,给parent_task_id_ 赋特定值,已试,可行;
  3. 重写TaskEntity类,给parent_task_id_ 赋特定值,已试,不建议。因为本地测试无问题但是打包到容器中执行时,由于容器加载jar,根据字母顺序加载jar包时,可能会activity-engine先加载,工程本身打出来的jar后加载,于是activity-engine的jar中的TaskEntity类先加载,导致重写的TaskEntity类无法加载,会导致无法实现赋值;

activiti通过扩展点重写节点行为遇到的问题

在按照https://blog.csdn.net/sadoshi/article/details/106913164 配置,实际上运行时,还是发生如图所示的错误:
java.lang.NullPointerException
at org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory.createCallActivityBehavior(DefaultActivityBehaviorFactory.java:304)
在这里插入图片描述
debug跟进去一看,expressionManager对象为空了
在这里插入图片描述
往上跟进的时候发现,这个expressionManager对象是ProcessEngineConfigurationImpl给其赋值的。当没有重写默认的事件工厂的时候,这个activityBehaviorFactory是为空的,所以会new 一个DefaultActivityBehaviorFactory,并且将ProcessEngineConfigurationImpl的expressionManager对象赋值给默认的事件工厂,后续调用DefaultActivityBehaviorFactory.createCallActivityBehavior就不会为空。但是我们重写了之后,这里就不再为空了,所以也就是ProcessEngineConfigurationImpl的expressionManager不会赋值给我们重写的工厂,所以才会报错null异常。
在这里插入图片描述
于是在重写的工厂里面,直接注入这个对象就好啦,问题就解决啦~~~~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值