You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:15:33