无需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
相关产品推荐
相关产品推荐

