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

如何在Camunda 8运行时通过Java逻辑更新流程变量?

在Camunda 8 Java逻辑中运行时更新流程变量

Camunda 8基于Zeebe引擎,API体系和Camunda 7差异较大,没有RuntimeService这类组件,需通过Zeebe Java客户端实现流程变量的运行时更新。以下是对应Camunda 7实现的等效方案:

1. 添加Zeebe客户端依赖

首先在项目中引入Zeebe Java客户端依赖(以Maven为例):

<dependency>
    <groupId>io.camunda</groupId>
    <artifactId>zeebe-client-java</artifactId>
    <version>8.5.0</version> <!-- 使用与你的Camunda 8集群匹配的版本 -->
</dependency>

2. 完整实现代码

初始化Zeebe客户端

// 初始化Zeebe客户端,替换为你的集群网关地址
ZeebeClient client = ZeebeClient.newClientBuilder()
    .gatewayAddress("localhost:26500")
    .usePlaintext() // 生产环境建议使用TLS加密
    .build();

查询活跃流程实例并更新变量

场景1:更新流程实例全局变量(对应Camunda 7流程实例级变量)

// 查询指定流程定义的活跃流程实例
List<ProcessInstance> activeInstances = client.newListProcessInstancesCommand()
    .processDefinitionKey(processKey)
    .state(ProcessInstanceState.ACTIVE)
    .send()
    .join()
    .getProcessInstances();

// 遍历更新每个流程实例的全局变量
activeInstances.forEach(instance -> {
    client.newSetVariablesCommand(instance.getProcessInstanceKey())
        .variables(Map.of(variableName, variableValue))
        .send()
        .join();
});

场景2:更新元素实例局部变量(对应Camunda 7 Execution级局部变量)

如果需要更新流程中特定执行节点(如用户任务、服务任务)的局部变量,需先查询流程实例下的活跃元素实例:

// 查询指定流程定义的活跃流程实例
List<ProcessInstance> activeInstances = client.newListProcessInstancesCommand()
    .processDefinitionKey(processKey)
    .state(ProcessInstanceState.ACTIVE)
    .send()
    .join()
    .getProcessInstances();

// 遍历每个流程实例,查询其下的活跃元素实例并更新局部变量
activeInstances.forEach(instance -> {
    List<ProcessInstance> elementInstances = client.newListProcessInstancesCommand()
        .parentProcessInstanceKey(instance.getProcessInstanceKey())
        .state(ProcessInstanceState.ACTIVE)
        .send()
        .join()
        .getProcessInstances();

    elementInstances.forEach(elementInstance -> {
        client.newSetVariablesCommand(elementInstance.getProcessInstanceKey())
            .variables(Map.of(variableName, variableValue))
            .local(true) // 标记为局部变量,仅当前元素实例可见
            .send()
            .join();
    });
});

关键说明

  • Camunda 8中没有Execution概念,取而代之的是流程实例(全局执行上下文)和元素实例(流程中具体执行的节点)。
  • local(true)参数用于设置局部变量,仅当前元素实例可见;不设置则默认是全局变量,整个流程实例可访问。
  • 操作完成后记得关闭客户端释放资源:client.close();

内容的提问来源于stack exchange,提问作者Sonam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:32:36