Camunda 7.16 与 Spring Boot 3.x 集成实战:5分钟完成流程引擎嵌入与 REST API 调用
2026/7/11 1:53:18 网站建设 项目流程

Camunda 7.16 与 Spring Boot 3.x 集成实战:5分钟完成流程引擎嵌入与 REST API 调用

在当今企业级应用开发中,业务流程自动化已成为提升效率的关键。Camunda作为一款轻量级、高性能的开源工作流引擎,与Spring Boot的完美结合,能够为开发者提供快速实现复杂业务流程的能力。本文将带您从零开始,在Spring Boot 3.x项目中集成Camunda 7.16社区版,并通过REST API快速启动第一个流程实例。

1. 环境准备与依赖配置

首先创建一个全新的Spring Boot 3.x项目,推荐使用Spring Initializr(https://start.spring.io)生成项目骨架。确保选择的Java版本为17或以上,这是Spring Boot 3.x的最低要求。

pom.xml中添加Camunda的核心依赖:

<dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Camunda核心依赖 --> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>7.16.0</version> </dependency> <!-- 可选:REST API支持 --> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId> <version>7.16.0</version> </dependency> <!-- 数据库支持(以H2为例) --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies>

提示:Camunda需要数据库支持来持久化流程定义和实例数据。在生产环境中,建议使用MySQL、PostgreSQL等更稳定的数据库。

2. 基础配置

application.yml中添加Camunda的基本配置:

spring: datasource: url: jdbc:h2:mem:camunda;DB_CLOSE_DELAY=-1 username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: update camunda: bpm: admin-user: id: admin password: admin filter: create: All tasks database: schema-update: true auto-deployment-enabled: true

关键配置说明:

配置项说明推荐值
spring.datasource.url数据库连接URL根据实际数据库调整
camunda.bpm.admin-user管理员账号生产环境务必修改
camunda.bpm.database.schema-update自动更新数据库Schematrue(开发)/false(生产)
camunda.bpm.auto-deployment-enabled自动部署流程定义true

3. 部署第一个BPMN流程

src/main/resources目录下创建processes文件夹,然后新建一个简单的请假流程leave-request.bpmn

<?xml version="1.0" encoding="UTF-8"?> <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn"> <bpmn:process id="leaveRequest" name="Leave Request Process" isExecutable="true"> <bpmn:startEvent id="StartEvent_1"> <bpmn:outgoing>SequenceFlow_1</bpmn:outgoing> </bpmn:startEvent> <bpmn:sequenceFlow id="SequenceFlow_1" sourceRef="StartEvent_1" targetRef="Task_1" /> <bpmn:userTask id="Task_1" name="Submit Leave Request"> <bpmn:incoming>SequenceFlow_1</bpmn:incoming> <bpmn:outgoing>SequenceFlow_2</bpmn:outgoing> </bpmn:userTask> <bpmn:sequenceFlow id="SequenceFlow_2" sourceRef="Task_1" targetRef="Task_2" /> <bpmn:userTask id="Task_2" name="Manager Approval"> <bpmn:incoming>SequenceFlow_2</bpmn:incoming> <bpmn:outgoing>SequenceFlow_3</bpmn:outgoing> </bpmn:userTask> <bpmn:sequenceFlow id="SequenceFlow_3" sourceRef="Task_2" targetRef="EndEvent_1" /> <bpmn:endEvent id="EndEvent_1"> <bpmn:incoming>SequenceFlow_3</bpmn:incoming> </bpmn:endEvent> </bpmn:process> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <!-- 省略图形布局定义 --> </bpmndi:BPMNDiagram> </bpmn:definitions>

启动应用后,Camunda会自动检测并部署processes目录下的BPMN文件。您可以通过以下URL访问Camunda的管理界面:

  • Cockpit: http://localhost:8080/camunda/app/cockpit/default/
  • Tasklist: http://localhost:8080/camunda/app/tasklist/default/

4. 通过Java API操作流程引擎

创建一个服务类来封装常用的流程操作:

@Service public class CamundaService { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private RepositoryService repositoryService; // 启动流程实例 public String startProcess(String processDefinitionKey, Map<String, Object> variables) { ProcessInstance instance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables); return instance.getId(); } // 查询用户任务 public List<Task> getUserTasks(String assignee) { return taskService.createTaskQuery() .taskAssignee(assignee) .list(); } // 完成任务 public void completeTask(String taskId, Map<String, Object> variables) { taskService.complete(taskId, variables); } // 部署BPMN文件 public Deployment deployBpmnFile(String resourceName, InputStream inputStream) { return repositoryService.createDeployment() .addInputStream(resourceName, inputStream) .deploy(); } }

5. 通过REST API操作流程引擎

Camunda提供了完整的REST API支持。以下是使用Spring的RestTemplate调用API的示例:

@RestController @RequestMapping("/api/process") public class ProcessController { @Autowired private RestTemplate restTemplate; private static final String CAMUNDA_ENGINE_URL = "http://localhost:8080/engine-rest"; // 启动流程实例 @PostMapping("/start/{processDefinitionKey}") public ResponseEntity<?> startProcess( @PathVariable String processDefinitionKey, @RequestBody Map<String, Object> variables) { String url = CAMUNDA_ENGINE_URL + "/process-definition/key/" + processDefinitionKey + "/start"; Map<String, Object> request = new HashMap<>(); request.put("variables", variables); return restTemplate.postForEntity(url, request, String.class); } // 查询任务 @GetMapping("/tasks") public ResponseEntity<?> getTasks(@RequestParam String assignee) { String url = CAMUNDA_ENGINE_URL + "/task?assignee=" + assignee; return restTemplate.getForEntity(url, String.class); } // 完成任务 @PostMapping("/complete/{taskId}") public ResponseEntity<?> completeTask( @PathVariable String taskId, @RequestBody Map<String, Object> variables) { String url = CAMUNDA_ENGINE_URL + "/task/" + taskId + "/complete"; Map<String, Object> request = new HashMap<>(); request.put("variables", variables); return restTemplate.postForEntity(url, request, String.class); } }

6. 测试与验证

创建一个测试Controller来验证我们的集成:

@RestController @RequestMapping("/test") public class TestController { @Autowired private CamundaService camundaService; @PostMapping("/leave") public String applyLeave(@RequestBody Map<String, Object> request) { // 启动请假流程 String processInstanceId = camundaService.startProcess( "leaveRequest", Map.of( "employee", request.get("employee"), "days", request.get("days"), "reason", request.get("reason") ) ); return "Leave process started with ID: " + processInstanceId; } @GetMapping("/tasks/{assignee}") public List<Map<String, Object>> getTasks(@PathVariable String assignee) { return camundaService.getUserTasks(assignee).stream() .map(task -> Map.of( "id", task.getId(), "name", task.getName(), "created", task.getCreateTime() )) .collect(Collectors.toList()); } @PostMapping("/complete/{taskId}") public String completeTask( @PathVariable String taskId, @RequestBody Map<String, Object> decision) { camundaService.completeTask(taskId, decision); return "Task " + taskId + " completed"; } }

使用curl或Postman测试API:

# 启动请假流程 curl -X POST http://localhost:8080/test/leave \ -H "Content-Type: application/json" \ -d '{"employee":"john","days":3,"reason":"Family event"}' # 查询john的任务 curl http://localhost:8080/test/tasks/john # 完成提交请假申请任务 curl -X POST http://localhost:8080/test/complete/{taskId} \ -H "Content-Type: application/json" \ -d '{"approved":true,"comments":"Approved"}'

7. 高级配置与优化

对于生产环境,还需要考虑以下配置:

数据库连接池配置(在application.yml中):

spring: datasource: hikari: maximum-pool-size: 20 minimum-idle: 5 idle-timeout: 30000 max-lifetime: 1800000 connection-timeout: 30000

异步执行配置

@Configuration public class CamundaAsyncConfig { @Bean public ProcessEnginePlugin asyncConfiguration() { return new AbstractProcessEnginePlugin() { @Override public void preInit(ProcessEngineConfigurationImpl configuration) { configuration.setJobExecutorActivate(true); configuration.setJobExecutorDeploymentAware(true); } }; } }

性能监控配置

@Configuration public class CamundaMetricsConfig { @Bean public ProcessEnginePlugin metricsPlugin() { return new MetricsPlugin(); } @Bean public MeterRegistry meterRegistry() { return new SimpleMeterRegistry(); } }

通过以上步骤,您已经成功在Spring Boot 3.x项目中集成了Camunda 7.16,并实现了基本的流程管理和REST API调用。这种集成方式既保持了Spring Boot的简洁性,又充分利用了Camunda强大的流程引擎能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询