无论是查询待办还是已办,当你对query加上
.includeProcessVariables()方法后,activiti会按照自定义的最大值(默认是20000)来查出所有数据,然后在结果中处理分页。这会导致相当大的数据量。
int firstResult = historicTaskInstanceQuery.getFirstResult();
int maxResults = historicTaskInstanceQuery.getMaxResults();
// setting max results, limit to 20000 results for performance reasons
if (historicTaskInstanceQuery.getTaskVariablesLimit() != null) {
historicTaskInstanceQuery.setMaxResults(historicTaskInstanceQuery.getTaskVariablesLimit());
} else {
historicTaskInstanceQuery.setMaxResults(getProcessEngineConfiguration().getHistoricTaskQueryLimit());
}
historicTaskInstanceQuery.setFirstResult(0);
List<HistoricTaskInstance> instanceList = getDbSqlSession().selectListWithRawParameterWithoutFilter("selectHistoricTaskInstancesWithVariablesByQueryCriteria", historicTaskInstanceQuery,
historicTaskInstanceQuery.getFirstResult(), historicTaskInstanceQuery.getMaxResults());
if (instanceList != null && !instanceList.isEmpty()) {
if (firstResult > 0) {
if (firstResult <= instanceList.size()) {
int toIndex = firstResult + Math.min(maxResults, instanceList.size() - firstResult);
return instanceList.subList(firstResult, toIndex);
} else {
return Collections.EMPTY_LIST;
}
} else {
int toIndex = Math.min(maxResults, instanceList.size());
return instanceList.subList(0, toIndex);
}
}