问题现象
在使用activiti进行流程驱动时,跟踪出一个activiti查询SQL,导致了内存溢出,经查是activiti的查询SQL没有添加where子句导致查询了全表(act_hi_taskinst),该表数据量极大,所以直接导致了内存溢出;
但是在调用该查询接口的时候,很确定是传入了参数的;
原因分析
上述接口可见是传了参数的,但是唯一不严谨的是,参数没有判空;
当传入的参数processInstanceId为空时,activiti不会抛异常,也不会转成is null条件,而是直接忽略;
这样就导致查询sql没有了where条件进而直接查询了全表;
所以在使用actitivi提供的查询api时一定要对入参进行严格的空值判断;