如何在Camunda中获取带有过程变量的用户任务列表



我有一个要求,在给定的时间,可以为用户分配数千(1000-5000)个任务,这些任务属于不同的流程实例(1000-5000中的同一用户任务)。我有一个自定义任务列表屏幕,在那里我需要加载所有任务及其基本信息(id、名称、流程实例id等)和每个任务的一些流程变量。

首先,我使用了filter/list REST服务,即enginerest/filter/{filter id}/list来获取带有流程变量的任务。(我在Camunda任务列表中创建了一个过滤器)。但是,当有1000多个进程实例存在问题时,这个REST服务需要很长时间才能返回。大约2000个流程实例需要7-8分钟。也许是因为这个服务返回了很多我不需要的信息。

因此,我决定使用CamundaJavaapi编写自己的REST服务。这就是我所做的-

List<Task> tasks = taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).taskAssignee(assignee).list();
 if(tasks != null && !tasks.isEmpty()){
 for(Task task : tasks){
 .....
 .....
 Map<String, Object> variables = taskService.getVariables(task.getId(), variableNames);
 .....
}}

这比过滤服务有效而且速度快得多。但在大约1000个例子中,它需要大约25秒。(我的服务器现在还不是生产级,TomcatXms-1gbXmx-2gb)。

但我担心的是,在内部,这段代码是否会(对于taskquery返回的每个任务)访问DB 1000次以获取变量?更糟糕的是,根据变量的数量,它是否为每个变量多次查询数据库?我的意思是,对于5个变量,我们是否达到DB 5000次?

1) 如果是的话,我有什么办法可以改进这项服务吗?比如我可以写一个NativeTaskQuery吗?在这里我加入了act_ru_task、act_ru_process&act_ru_variable表来获取我需要的数据?这是正确的方式吗?2) Camunda中没有任何内置的缓存可以在这里提供帮助吗?

提前感谢您的帮助。

您可以为此使用自定义查询。编写本机sql查询并添加mybatis映射。这个例子解释了这个概念:https://github.com/camunda-consulting/code/tree/master/snippets/custom-queries

最新更新