Camunda:通过多个流程实例共享变量的最佳实践

Camunda: Best practice to share variables through multiple process instances

由于我目前仍是使用 camunda 的初学者,我想知道使用 camunda 和 BPMN 工作流通过多个流程实例共享变量的最佳实践是什么。 示例工作流如下所示:

工作流包含在特定时间段内查找产品。该周期不会在进程开始时给出,因为它是基于计时器的启动。必须存储查找的时间段并将其提供给流程范围。

详细来说,第一个任务获取最近一次成功执行的时间戳,并将其作为参数提供给工作流。第二个任务根据上次成功执行的时间戳检查新产品。第三个任务对产品进行处理,最后一个任务存储最新的成功时间戳。

一个spring引导应用程序[版本:2.3.4]是围绕camunda [版本:7.14.0]构建的,直到现在,我只有camunda数据库并且想存储值给定的功能。

存储值并使其对所有流程实例可用的最佳方式是什么?

对于跨流程实例共享数据的一般要求,您可以实现拥有数据的 REST 服务。 Camunda 使用 JAX-RS(泽西岛)。但是,您也可以使用 Spring 或其他选项来创建 REST 服务。

Spring 包含数据模型和持久性的数据示例在同一个 H2 DB Camunda 中使用:

https://github.com/rob2universe/rest-account-service

JAX-RS (Jersey) 示例,仅显示如何向 Camunda 添加 REST 服务 API:

https://github.com/rob2universe/camunda-custom-rest-endpoint

但是,您的要求并不是真正跨多个流程实例共享业务数据。您只想知道最后一次进程实例 运行 的时间。这是您可以通过 运行 流程实例查询轻松弄清楚的事情。类似于:

var list = engine.getHistoryService().createHistoricProcessInstanceQuery()
    .processDefinitionKey(PD_KEY)
    .orderByProcessInstanceEndTime()
    .list();

使用这种方法,您可以在需要时从 Camunda 历史记录中检索信息,而无需在单独的 table.

中显式存储和读取数据。