Flowable7工作流引擎在Spring Boot3中的集成与实践
1. 项目概述最近在重构公司的工作流引擎决定将老旧的Activiti5升级到Flowable7。作为一款轻量级业务流程引擎Flowable7在Spring Boot3.x环境下展现出强大的兼容性和灵活性。今天我就来分享下从零开始集成Flowable7的完整过程包括环境搭建、流程设计、部署运行等核心环节。这个方案特别适合需要快速构建审批流、任务流转的中小型系统。相比ActivitiFlowable7提供了更简洁的API、更完善的REST支持和更活跃的社区。通过Spring Boot Starter方式集成30分钟内就能让第一个流程跑起来。2. 环境准备与基础集成2.1 依赖配置首先在pom.xml中添加关键依赖dependency groupIdorg.flowable/groupId artifactIdflowable-spring-boot-starter/artifactId version7.0.0/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency注意Flowable7.x默认使用Spring Boot3.x的自动配置如果项目还在用Spring Boot2.x需要特别注意版本兼容性问题。2.2 数据库配置Flowable默认会创建23张表来存储流程定义、实例、任务等数据。在application.yml中配置spring: datasource: url: jdbc:mysql://localhost:3306/flowable-demo?useSSLfalse username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver flowable: database-schema-update: true关键参数说明database-schema-update: true表示自动创建或更新表结构生产环境建议改为false并通过Flyway管理2.3 启动验证启动应用后检查日志看到以下输出说明集成成功o.f.s.SpringProcessEngineConfiguration : ProcessEngine default created o.f.s.SpringProcessEngineConfiguration : Flowable BPMN Process Engine configured3. 流程设计与部署3.1 创建BPMN流程图在resources/processes下新建leave-request.bpmn20.xmldefinitions xmlnshttp://www.omg.org/spec/BPMN/20100524/MODEL process idleaveRequest name请假流程 startEvent idstart/ userTask idleaderAudit name主管审批/ exclusiveGateway iddecision/ sequenceFlow sourceRefstart targetRefleaderAudit/ sequenceFlow sourceRefleaderAudit targetRefdecision/ sequenceFlow sourceRefdecision targetRefhrAudit conditionExpression xsi:typetFormalExpression ![CDATA[${days 3}]] /conditionExpression /sequenceFlow userTask idhrAudit nameHR审批/ endEvent idend/ sequenceFlow sourceRefhrAudit targetRefend/ /process /definitions这个流程定义了员工发起请假申请主管审批请假天数3天时需要HR二次审批3.2 部署流程定义通过RepositoryService部署流程RestController public class ProcessController { Autowired private RepositoryService repositoryService; PostMapping(/deploy) public String deploy() { Deployment deployment repositoryService.createDeployment() .addClasspathResource(processes/leave-request.bpmn20.xml) .name(请假流程部署) .deploy(); return 部署成功ID deployment.getId(); } }部署成功后可以在ACT_RE_PROCDEF表中看到流程定义信息。4. 流程实例管理4.1 启动流程实例Autowired private RuntimeService runtimeService; public String startProcess(String employee, int days) { MapString, Object variables new HashMap(); variables.put(employee, employee); variables.put(days, days); ProcessInstance instance runtimeService.startProcessInstanceByKey( leaveRequest, variables); return instance.getId(); }4.2 查询与完成任务Autowired private TaskService taskService; // 查询用户任务 public ListTask getTasks(String assignee) { return taskService.createTaskQuery() .taskAssignee(assignee) .list(); } // 完成任务 public void completeTask(String taskId) { taskService.complete(taskId); }5. 实战技巧与避坑指南5.1 性能优化建议异步执行器配置flowable: async-executor-activate: true async-executor-core-pool-size: 10 async-executor-max-pool-size: 50历史数据清理historyService.createHistoricProcessInstanceQuery() .finished() .list() .forEach(instance - historyService.deleteHistoricProcessInstance(instance.getId()));5.2 常见问题解决问题1启动时报表不存在错误检查数据库用户是否有建表权限确认flowable.database-schema-update配置为true问题2流程定义修改后不生效每次修改BPMN文件需要重新部署生成新版本使用repositoryService.createDeployment().enableDuplicateFiltering(true)问题3任务查询慢为ACT_RU_TASK表的PROC_INST_ID_字段添加索引避免使用通配符查询6. 扩展功能实现6.1 动态分配任务处理人在BPMN中使用表达式动态指定处理人userTask idleaderAudit name主管审批 flowable:assignee${employee.department.leader}/6.2 邮件通知集成配置邮件服务器后可以在流程中添加邮件任务serviceTask idsendMail flowable:typemail extensionElements flowable:field nameto flowable:string${employee.email}/flowable:string /flowable:field flowable:field namesubject flowable:string您的请假申请已提交/flowable:string /flowable:field /extensionElements /serviceTask7. 监控与管理7.1 流程实例监控// 查询运行中的流程实例 runtimeService.createProcessInstanceQuery() .processDefinitionKey(leaveRequest) .list(); // 获取流程变量 runtimeService.getVariables(processInstanceId);7.2 使用Flowable UI添加依赖后访问/flowable-uidependency groupIdorg.flowable/groupId artifactIdflowable-ui-modeler-rest/artifactId version7.0.0/version /dependency8. 生产环境建议数据库连接池建议使用HikariCP并合理配置大小日志分离将Flowable日志单独输出到文件集群部署需要配置分布式锁和共享数据库版本控制使用Git管理BPMN文件变更历史实际项目中我们发现当并发量超过100TPS时需要特别注意异步执行器的线程池配置和数据库连接池大小。另外建议对历史数据设置自动归档策略避免主表数据膨胀影响查询性能。

相关新闻

彻底卸载Node.js的完整指南:Windows与macOS方案

彻底卸载Node.js的完整指南:Windows与macOS方案

1. 为什么需要彻底卸载Node.js?在开发过程中,我们可能会遇到Node.js版本冲突、安装包损坏或需要完全重装环境的情况。常规的删除操作往往会在系统各处留下残留文件和配置项,导致重新安装时出现各种诡异问题。上周我就因为旧版本残留导致npm全…

2026/10/14 0:19:47 阅读更多 →
电力系统同步相量算法对比与Matlab实现

电力系统同步相量算法对比与Matlab实现

1. 电力系统同步相量计算的核心价值在电力系统运行与控制中,同步相量测量就像给电网做实时心电图。它能精确捕捉电压、电流的幅值和相位信息,为电网稳定分析、故障诊断和广域控制提供关键数据支撑。传统基于过零检测的方法在谐波干扰下误差显著&#xff…

2026/10/14 0:19:47 阅读更多 →
pstack工作原理与四大失效场景深度解析

pstack工作原理与四大失效场景深度解析

1. 为什么一个看似简单的命令值得单独写一篇“完整指南”&#xff1f;很多人第一次听说pstack&#xff0c;是在某个深夜排查线上服务卡顿问题时&#xff0c;被同事甩来一句&#xff1a;“快用pstack <pid>看下线程栈&#xff0c;是不是死锁了&#xff1f;”——然后你照着…

2026/10/14 0:18:47 阅读更多 →

最新新闻

Python第3章练习题解析:数据类型、字符串与格式化输出避坑指南

Python第3章练习题解析:数据类型、字符串与格式化输出避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:07:04 阅读更多 →
ESP32S3 Dev Module:Arduino兼容的原生USB嵌入式开发新范式

ESP32S3 Dev Module:Arduino兼容的原生USB嵌入式开发新范式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:07:04 阅读更多 →
高位数阶乘计算:MATLAB、Python、C三语言实现与性能对比

高位数阶乘计算:MATLAB、Python、C三语言实现与性能对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:07:04 阅读更多 →
element-react Radio 单选框组件详解:受控选中、Group 聚合与 Button 样式的源码级解析

element-react Radio 单选框组件详解:受控选中、Group 聚合与 Button 样式的源码级解析

前端UI组件设计系统 【免费下载链接】element-react Element UI 项目地址&#xff1a; https://gitcode.com/gh_mirrors/el/element-react 点击查看 免费下载 本篇技术文章围绕 element-react&#xff08;Element UI for React&#xff0c;当前仓库版本 1.4.34&#xff09;的 …

2026/10/14 1:07:04 阅读更多 →
密码与加密技术复习指南:从对称加密到PKI的网络安全知识框架

密码与加密技术复习指南:从对称加密到PKI的网络安全知识框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:07:04 阅读更多 →
Dart List实战指南:从增删改查到Flutter状态管理踩坑总结

Dart List实战指南:从增删改查到Flutter状态管理踩坑总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:06:04 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →