Activiti5工作流实战:从零搭建一个请假审批系统(SpringBoot集成版)
最近在帮几个初创团队做内部系统升级,发现一个挺普遍的需求:如何快速、低成本地给现有的业务系统加上一套像样的审批流程?尤其是像请假、报销、采购这类高频、规则相对固定的场景。很多团队一开始用状态字段硬编码,随着业务复杂,代码里到处是if-else,维护起来简直是噩梦。这时候,引入一个成熟的工作流引擎就显得非常必要了。
在Java生态里,Activiti是一个绕不开的选择。它轻量、开源、社区活跃,而且与Spring家族集成起来非常丝滑。今天,我就以最常见的“员工请假审批”为例,带你从零开始,用Activiti5和SpringBoot搭一套可用的审批系统。我们不止是跑通一个Demo,更会深入到流程设计、表单绑定、节点跳转这些实际开发中必然会遇到的细节,并聊聊在选型时,Activiti和它的“前辈”JBPM到底有哪些不同。
1. 环境准备与项目初始化
搭建任何技术栈,第一步永远是准备好趁手的“兵器”。对于我们的SpringBoot + Activiti5项目,你需要确保本地环境有JDK 8或以上版本,以及Maven 3.6+。我个人的习惯是使用IntelliJ IDEA,它在Spring项目和数据库可视化方面确实能省不少事。
首先,我们通过Spring Initializr快速生成项目骨架。核心依赖除了SpringBoot的Web和JPA,最关键的就是Activiti的Spring Boot Starter。
<!-- pom.xml 关键依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.22.0</version> <!-- 请注意版本号 -->
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
这里有个小坑需要注意:Activiti的不同版本与SpringBoot的兼容性。我推荐使用5.22.0这个相对稳定且文档齐全的版本。配置完依赖后,在application.yml里配置数据库连接和Activiti的基本属性。
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/activiti_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
# Activiti配置
activiti:
database-schema-update: true # 自动更新数据库表结构
db-history-used: true # 使用历史表
history-level: audit # 历史记录级别,建议audit以记录详细信息
check-process-definitions: true # 启动时检查流程定义
启动项目,如果控制台没有报错,并且数据库中自动生成了数十张以ACT_开头的表,那么恭喜你,Activiti环境已经成功集成进来了。这些表是Activiti运行的核心,大致可以分为几类:
| 表前缀 | 含义 | 主要作用 |
|---|---|---|
ACT_RE_* |
存储 (Repository) | 存放静态的流程定义、部署资源(如图片、BPMN文件) |
ACT_RU_* |
运行时 (Runtime) | 存储正在运行的流程实例、任务、变量等,流程结束会清理 |
ACT_HI_* |
历史 (History) |

&spm=1001.2101.3001.5002&articleId=149953213&d=1&t=3&u=3658fbf4f5874e50b4caede0a92da120)
2万+

被折叠的 条评论
为什么被折叠?



