资讯动态

若依框架+Camunda实战:从集成到跑通第一个请假流程,我花了半天时间

发布时间:2026/10/2 3:33:28 来源:尧图企业网站定制
若依框架与Camunda实战快速构建请假审批流程当数据库里突然多出49张表时我知道Camunda已经成功集成到若依框架中了。但接下来该怎么做作为一个急需将流程引擎投入实际业务开发的实践者我需要的不是更多的配置说明而是一个能立即上手的实战案例。本文将分享如何用最短时间构建一个完整的请假审批流程——从绘制BPMN流程图到在若依中编写业务代码再到通过Camunda Cockpit监控流程状态。1. 环境准备与基础配置在开始构建请假流程前确保你的开发环境满足以下条件若依框架基于Spring Boot的权限管理系统本文使用分离版Camunda 7.16.0与Spring Boot 2.5.x版本兼容数据库MySQL 5.7已配置nullCatalogMeansCurrenttrue参数开发工具IntelliJ IDEA推荐或EclipseCamunda Modeler用于设计BPMN流程图提示若依框架默认使用MyBatis作为ORM框架与Camunda的JPA实现可以共存但需注意事务管理器的配置。验证集成是否成功的最简单方法是访问Camunda Cockpit界面http://localhost:8080/camunda/app/cockpit/default/2. 设计请假审批流程2.1 创建BPMN流程图使用Camunda Modeler设计一个简单的请假审批流程开始事件Start Event表示流程起点用户任务Apply Leave员工提交请假申请网关Exclusive Gateway决定审批路径用户任务Manager Approval经理审批结束事件End Event表示流程完成将文件保存为leave-approval.bpmn并放入项目的resources/processes目录。2.2 流程变量设计定义流程中需要传递的关键变量变量名类型描述employeeIdString申请人IDleaveDaysInteger请假天数reasonString请假原因approvedBoolean审批结果3. 若依框架中的业务实现3.1 创建Service层在若依的service模块中创建LeaveProcessServiceService public class LeaveProcessService { Autowired private RuntimeService runtimeService; Autowired private TaskService taskService; public String startProcess(String employeeId, int leaveDays, String reason) { MapString, Object variables new HashMap(); variables.put(employeeId, employeeId); variables.put(leaveDays, leaveDays); variables.put(reason, reason); ProcessInstance instance runtimeService.startProcessInstanceByKey( LeaveApproval, variables ); return instance.getId(); } public void completeTask(String taskId, boolean approved) { MapString, Object variables new HashMap(); variables.put(approved, approved); taskService.complete(taskId, variables); } }3.2 创建Controller接口在controller模块中添加REST接口RestController RequestMapping(/leave) public class LeaveController { Autowired private LeaveProcessService leaveProcessService; PostMapping(/start) public AjaxResult startProcess(RequestParam String employeeId, RequestParam int leaveDays, RequestParam String reason) { String processId leaveProcessService.startProcess( employeeId, leaveDays, reason ); return AjaxResult.success(流程已启动, processId); } PostMapping(/approve) public AjaxResult approveTask(RequestParam String taskId, RequestParam boolean approved) { leaveProcessService.completeTask(taskId, approved); return AjaxResult.success(审批完成); } }4. 流程测试与监控4.1 启动流程实例使用Postman测试流程启动POST http://localhost:8080/leave/start Content-Type: application/x-www-form-urlencoded employeeId1001leaveDays3reason家庭事务4.2 查询待办任务在若依框架的任务列表中集成Camunda任务public ListTask getTasksByAssignee(String assignee) { return taskService.createTaskQuery() .taskAssignee(assignee) .list(); }4.3 使用Camunda Cockpit监控访问Cockpit界面可以查看流程实例状态运行中/已完成当前活动节点停留在哪个审批环节流程变量值查看请假天数、原因等数据历史记录各环节的处理时间和处理人5. 常见问题与优化建议5.1 性能优化配置在application.yml中添加以下Camunda优化参数camunda.bpm: job-execution: max-wait: 5000 database: table-prefix: ACT_5.2 与若依用户体系集成实现Camunda用户服务与若依的对接Component public class RuoYiUserService implements UserService { Autowired private SysUserService sysUserService; Override public User createNewUser(String userId) { SysUser sysUser sysUserService.selectUserById(Long.valueOf(userId)); User user identityService.newUser(userId); user.setFirstName(sysUser.getUserName()); user.setEmail(sysUser.getEmail()); identityService.saveUser(user); return user; } }5.3 异步处理建议对于高并发场景建议启用异步延续serviceTask idapprovalTask camunda:asyncBeforetrue camunda:exclusivefalse /在实际项目中我发现将请假流程的网关判断逻辑外移到Java代码中更易维护。例如当请假天数超过5天时需要总监审批这种业务规则最好写在Service层而非BPMN中这样规则变更时不需要重新部署流程定义。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑