基于Java Spring Boot,根据POJO请求参数从Camunda获取流程实例ID
在Spring Boot中通过POJO参数获取Camunda流程实例ID
1. 启动流程时直接获取ID
当你用POJO作为启动参数发起Camunda流程时,调用启动接口后会直接返回ProcessInstance对象,从中即可提取流程实例ID。
实现步骤
- 注入Camunda核心组件
RuntimeService到Spring Bean中 - 将POJO直接作为流程变量传入(Camunda会自动序列化可序列化的POJO)
- 调用启动方法获取
ProcessInstance实例,调用getId()拿到ID
代码示例
import org.camunda.bpm.engine.RuntimeService; import org.camunda.bpm.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; @Service public class CamundaProcessStarter { private final RuntimeService runtimeService; // 构造函数注入RuntimeService public CamundaProcessStarter(RuntimeService runtimeService) { this.runtimeService = runtimeService; } public String startProcess(YourRequestPojo requestPojo) { // 传入流程定义Key和POJO参数启动流程 ProcessInstance instance = runtimeService.startProcessInstanceByKey( "your-process-def-key", // 替换为你的流程定义Key requestPojo ); return instance.getId(); } }
注意:你的POJO类需要实现
Serializable接口,否则Camunda无法将其序列化存储为流程变量。
2. 根据POJO参数查询已启动的流程实例ID
如果需要基于POJO中的特定参数,反向查询已运行的流程实例ID,可通过RuntimeService的查询API构建条件过滤。
代码示例
假设POJO包含businessId字段,以此为条件查询:
import org.camunda.bpm.engine.RuntimeService; import org.camunda.bpm.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class CamundaProcessQueryService { private final RuntimeService runtimeService; public CamundaProcessQueryService(RuntimeService runtimeService) { this.runtimeService = runtimeService; } public List<String> queryInstanceIdsByPojo(YourRequestPojo requestPojo) { List<ProcessInstance> instances = runtimeService.createProcessInstanceQuery() .processDefinitionKey("your-process-def-key") .variableValueEquals("businessId", requestPojo.getBusinessId()) // 匹配POJO中的业务参数 .list(); // 提取所有匹配的流程实例ID return instances.stream() .map(ProcessInstance::getId) .collect(Collectors.toList()); } }
扩展说明
- 若需要模糊匹配,可使用
variableValueLike方法 - 多条件查询可通过
and()拼接多个variableValueXXX条件
内容的提问来源于stack exchange,提问作者Sree
相关产品推荐
相关产品推荐

