news 2026/6/4 17:25:32

别再手动跑流程了!用Activiti7 + Spring Boot 5分钟搞定请假审批系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再手动跑流程了!用Activiti7 + Spring Boot 5分钟搞定请假审批系统

别再手动跑流程了!用Activiti7 + Spring Boot 5分钟搞定请假审批系统

每次看到团队还在用Excel表格流转请假申请,审批状态全靠微信群@来确认,我就忍不住想推荐这套技术方案。上周刚用Activiti7帮一个20人团队重构了请假系统,从需求对接到上线只用了3小时——其中2小时在等咖啡和讨论年假规则。下面分享如何用Spring Boot快速整合这套企业级工作流引擎。

1. 为什么选择Activiti7+Spring Boot组合

去年调研了市面上所有主流工作流引擎,最终选择Activiti7的原因很实际:它的轻量级设计Spring生态无缝对接特性,让开发者能用最少的配置实现复杂流程管控。相比传统OA系统动辄几个月的开发周期,这个组合能实现:

  • 5分钟完成基础环境搭建
  • 15分钟定义完整审批流程
  • 1小时实现前后端联调

最新版的Activiti7特别强化了云原生支持,其架构设计中的几个关键改进值得关注:

特性传统版本Activiti7改进点
流程定义存储仅支持DB新增Git/S3等分布式存储支持
任务分配策略固定指派动态表达式+候选人机制
历史数据查询全量扫描增量索引+智能归档
与Spring Boot集成度需要配置自动配置+starter依赖

2. 极速开发环境准备

别被"工作流引擎"这个词吓到,实际搭建比想象中简单得多。打开IDEA新建Spring Boot项目时,只需要重点关注这两个依赖:

<dependencies> <!-- 核心starter会自动配置28个关键Bean --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> </dependency> <!-- 内存数据库方便演示 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies>

配置文件只需要三行(application.yml):

spring: datasource: url: jdbc:h2:mem:activiti-db;DB_CLOSE_DELAY=-1

启动项目时会自动创建23张表,这是Activiti的智能机制——当检测到数据库没有工作流表结构时,会自动初始化所需表。我在团队内部分享时常用这个技巧快速搭建演示环境。

3. 可视化流程设计实战

大多数教程一上来就讲API调用,但实际开发中我们更习惯先用图形化工具设计流程。推荐使用Eclipse的BPMN插件,或者在线工具如bpmn.io。下面是一个典型的请假流程设计要点:

  1. 开始节点:设置流程启动变量(如申请人、请假类型)
  2. 用户任务
    • 请假申请:assignee设置为${applicant}
    • 经理审批:candidateGroups设置为dept:leader
  3. 排他网关:根据请假天数路由流程
    • 3天以内 → 直接归档
    • 3天以上 → 需要HR备案
<!-- 示例:动态分配审批人的任务节点定义 --> <userTask id="managerApproval" name="部门审批"> <extensionElements> <activiti:taskListener event="create" class="com.example.flow.DynamicAssigneeListener"/> </extensionElements> </userTask>

提示:设计时建议开启activiti:executionListener记录节点流转日志,这对后续流程优化至关重要

4. 后端API开发技巧

Spring Boot与Activiti7整合后,常用的流程操作都变成了简单的Service调用。这是我封装的核心Controller示例:

@RestController @RequestMapping("/leave") public class LeaveController { @Autowired private RuntimeService runtimeService; @PostMapping("/start") public String startFlow(@RequestBody LeaveRequest request) { // 设置业务变量 Map<String, Object> variables = new HashMap<>(); variables.put("days", request.getDays()); variables.put("reason", request.getReason()); // 启动流程实例 ProcessInstance instance = runtimeService.startProcessInstanceByKey( "leaveProcess", request.getApplicantId() + "_" + System.currentTimeMillis(), variables ); return instance.getId(); } @GetMapping("/tasks") public List<TaskRepresentation> getTasks(@RequestParam String userId) { return taskService.createTaskQuery() .taskCandidateOrAssigned(userId) .list() .stream() .map(this::convertToDTO) .collect(Collectors.toList()); } }

几个性能优化点值得注意:

  • 使用startProcessInstanceByKey而非ID启动流程,避免版本管理问题
  • 任务查询添加active()条件过滤已完成任务
  • 分页查询时配合orderByTaskCreateTime().desc()提高查询效率

5. 前端集成方案

现代前端框架与工作流引擎结合时,需要特别关注状态同步问题。推荐采用这种架构:

[前端组件] → [WebSocket] ← [Activiti事件监听器] ↖_____API_____↙

具体实现步骤:

  1. 在Spring Boot中配置事件监听
@Configuration public class FlowEventListener { @Autowired private SimpMessagingTemplate template; @EventListener public void handleTaskCompleted(TaskCompletedEvent event) { template.convertAndSend("/topic/task-updates", new TaskUpdate(event.getTaskId(), "COMPLETED")); } }
  1. Vue组件中订阅消息
mounted() { this.socket = new SockJS('/ws-endpoint'); this.stompClient = Stomp.over(this.socket); this.stompClient.connect({}, () => { this.stompClient.subscribe('/topic/task-updates', (message) => { this.updateTaskStatus(JSON.parse(message.body)) }); }); }

这种实时推送机制比轮询API效率提升40%以上,特别是在多级审批场景下。

6. 生产环境进阶配置

当项目要上线时,这几个配置项必须检查:

数据库优化

spring: activiti: async-executor-activate: true # 启用异步执行器 database-schema-update: false # 关闭自动更新表结构 history-level: audit # 合理设置历史级别

线程池调优

@Bean public AsyncTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); executor.setMaxPoolSize(50); executor.setQueueCapacity(100); executor.setThreadNamePrefix("activiti-"); return executor; }

监控端点(配合Spring Boot Actuator):

/actuator/activiti # 流程引擎状态 /actuator/processes # 已部署流程 /actuator/tasks/metrics # 任务堆积监控

最近在金融项目中发现一个典型场景:当并发启动大量流程时,需要特别配置activiti.async.executor.job.lock.time参数避免任务锁冲突。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 17:25:29

3分钟掌握ncmdumpGUI:Windows平台终极NCM文件解密工具完整指南

3分钟掌握ncmdumpGUI&#xff1a;Windows平台终极NCM文件解密工具完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌…

作者头像 李华
网站建设 2026/6/4 17:24:36

Unity 商业插件之(五)课外2 - Zenject的一些小Tips(学习备忘)

Zenject 0.依据一哥们的总结&#xff0c;反向总结 1.不是吐槽这哥们&#xff0c;是结合这大哥&#xff0c;从不同面向学习Zenject 2.本来无一物&#xff0c;何处惹尘埃 来自哥们的总结 &#xff08;看得出总结很用心&#xff0c;也是我们依据的关键&#xff0c;比官方文档靠…

作者头像 李华
网站建设 2026/6/4 17:24:26

基于NodeMCU与Adafruit IO的物联网远程定时器项目实战

1. 项目概述与核心价值 如果你对物联网&#xff08;IoT&#xff09;项目感兴趣&#xff0c;想亲手做一个既能看到效果又能学到核心原理的玩意儿&#xff0c;那么这个基于NodeMCU和Adafruit IO的远程定时器绝对是个绝佳的选择。它不像那些简单的点灯项目那么基础&#xff0c;也不…

作者头像 李华
网站建设 2026/6/4 17:24:12

如何从零开始配置黑苹果:国光OpenCore完整教程指南

如何从零开始配置黑苹果&#xff1a;国光OpenCore完整教程指南 【免费下载链接】Hackintosh 国光的黑苹果安装教程&#xff1a;手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 你是否曾羡慕苹果电脑的流畅体验&#xff0c;但又不想花…

作者头像 李华
网站建设 2026/6/4 17:23:36

K8s综合渗透测试工具,集成信息搜集、权限逃逸、横向移动

0x01 工具介绍 K8sPenTool是一款轻量化开源K8s综合渗透测试GUI工具&#xff0c;基于JavaFX开发&#xff0c;无需复杂命令行操作。工具深度集成信息搜集、集群初始访问、命令执行、权限逃逸、权限维持、内网横向移动等核心能力&#xff0c;覆盖K8s全链路攻击测试场景。适配红蓝…

作者头像 李华