问题现象
在使用activiti进行流程驱动时,跟踪出一个activiti查询SQL,导致了内存溢出,经查是activiti的查询SQL没有添加where子句导致查询了全表(act_hi_taskinst),该表数据量极大,所以直接导致了内存溢出;

但是在调用该查询接口的时候,很确定是传入了参数的;

原因分析
上述接口可见是传了参数的,但是唯一不严谨的是,参数没有判空;
当传入的参数processInstanceId为空时,activiti不会抛异常,也不会转成is null条件,而是直接忽略;
这样就导致查询sql没有了where条件进而直接查询了全表;
所以在使用actitivi提供的查询api时一定要对入参进行严格的空值判断;
本文记录了一次由于 Activiti 查询未进行参数判空导致的内存溢出问题。当processInstanceId为空时,查询SQL未转化为isnull条件,从而查询全表(act_hi_taskinst),在大数据量下引发了内存溢出。为避免此类问题,务必在使用Activiti API时严格检查输入参数。
1791

被折叠的 条评论
为什么被折叠?



