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

无需Camunda Cockpit及REST API管控Camunda引擎BPMN流程的方案

无需Cockpit/REST API管控Camunda流程的Java实现方案

你完全可以通过Camunda的Java原生API直接管控流程,核心依赖就是Camunda Engine的JAR包,不需要依赖Cockpit或REST API。以下是具体实现方案:

核心依赖

在Maven项目中引入Camunda Engine核心依赖(Gradle项目同理),版本请匹配你使用的Camunda版本:

<dependency>
  <groupId>org.camunda.bpm</groupId>
  <artifactId>camunda-engine</artifactId>
  <version>7.21.0</version>
</dependency>

如果是纯JAR包引入,直接从Maven仓库下载camunda-engine-{version}.jar及它的依赖包即可。

常用流程管控操作示例

1. 初始化Camunda引擎

首先需要创建ProcessEngine实例,测试环境可以用内存数据库,生产环境配置真实数据库(如MySQL、PostgreSQL):

// 测试用内存引擎配置
ProcessEngine processEngine = ProcessEngineConfiguration
  .createStandaloneInMemProcessEngineConfiguration()
  .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
  .buildProcessEngine();

// 生产用数据库配置示例
// ProcessEngine processEngine = ProcessEngineConfiguration
//   .createStandaloneProcessEngineConfiguration()
//   .setJdbcUrl("jdbc:mysql://localhost:3306/camunda")
//   .setJdbcUsername("root")
//   .setJdbcPassword("password")
//   .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
//   .buildProcessEngine();

2. 部署你的BPMN流程

把提前写好的BPMN文件部署到引擎中:

RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
  .addClasspathResource("processes/leave-approval.bpmn") // 替换为你的BPMN文件路径
  .deploy();

3. 启动流程并传入参数

启动流程时可以直接传入业务参数,这些参数会作为流程变量被BPMN中的节点使用:

RuntimeService runtimeService = processEngine.getRuntimeService();

// 构造流程变量
Map<String, Object> variables = new HashMap<>();
variables.put("leaveDays", 5);
variables.put("employeeId", "E001");

// 通过流程Key启动实例(BPMN文件中定义的process id)
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave-approval-process", variables);

4. 代码中做决策并推进流程

比如根据业务逻辑设置变量,触发网关分支,或者直接完成任务:

// 根据业务逻辑设置决策变量
boolean isEligible = checkEmployeeEligibility("E001", 5); // 自定义业务逻辑方法
runtimeService.setVariable(processInstance.getId(), "isEligibleForLeave", isEligible);

// 查询并完成等待中的用户任务
TaskService taskService = processEngine.getTaskService();
Task approvalTask = taskService.createTaskQuery()
  .processInstanceId(processInstance.getId())
  .taskDefinitionKey("manager-approval-task") // BPMN中任务的id
  .singleResult();

// 完成任务时传入审批意见
Map<String, Object> taskVars = new HashMap<>();
taskVars.put("approvalComment", "同意请假");
taskService.complete(approvalTask.getId(), taskVars);

5. 查询流程状态与变量

随时获取流程的运行状态、变量信息:

// 查询所有运行中的请假流程实例
List<ProcessInstance> runningProcesses = runtimeService.createProcessInstanceQuery()
  .processDefinitionKey("leave-approval-process")
  .active()
  .list();

// 获取某个流程实例的所有变量
Map<String, Object> processVars = runtimeService.getVariables(processInstance.getId());
System.out.println("当前请假天数:" + processVars.get("leaveDays"));
System.out.println("审批状态:" + processVars.get("isEligibleForLeave"));

6. 管控流程生命周期

直接挂起、终止流程实例:

// 挂起流程实例(暂停运行)
runtimeService.suspendProcessInstanceById(processInstance.getId());

// 终止流程实例
runtimeService.deleteProcessInstance(processInstance.getId(), "因员工撤销申请终止");

核心API说明

  • RepositoryService: 负责流程定义的部署、查询、删除
  • RuntimeService: 负责流程实例的启动、变量管理、生命周期管控
  • TaskService: 负责用户任务的查询、完成、变量操作
  • HistoryService: 负责查询历史流程实例、任务记录等归档数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:41:40