Appearance
工作流引擎集成
**本文引用的文件** - [LemesServiceDmWorkflowServerApplication.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/LemesServiceDmWorkflowServerApplication.java) - [application.yml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/resources/application.yml) - [bootstrap.yml](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/resources/bootstrap.yml) - [pom.xml(workflow-server)](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/pom.xml) - [pom.xml(workflow-common)](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/pom.xml) - [AsyncPoolConfig.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/common/AsyncPoolConfig.java) - [FlowRepositoryServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/impl/FlowRepositoryServiceImpl.java) - [FlowRuntimeServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-server/src/main/java/com/lenovo/lemes/service/dm/workflow/service/impl/FlowRuntimeServiceImpl.java) - [WorkFlowBusinessEnum.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/enums/WorkFlowBusinessEnum.java) - [FlowClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/feign/FlowClient.java) - [FlowUserDo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/workflow/FlowUserDo.java) - [init.js(前端Flowable初始化)](file://dm/lemes-web/src/components/bpmnModeler/flowable/init.js)目录
简介
本技术文档面向DeviceMate工作流引擎集成,聚焦于Flowable流程引擎在Spring Boot中的集成方案与运行实践,涵盖引擎初始化、数据源与事务管理、缓存策略、服务启动与注册发现、自动配置与自定义配置、参数调优、性能监控与故障排除,并提供可落地的配置示例与最佳实践建议。
项目结构
工作流服务位于“lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow”模块,采用分层与多模块组织:
- workflow-common:公共能力与实体、枚举、异步线程池配置、Feign客户端接口定义
- workflow-server:Spring Boot应用入口、控制器、服务实现、资源文件(流程图、国际化、配置)
图表来源
章节来源
核心组件
- 应用入口与注册发现
- 启动类启用服务注册与发现、Feign客户端扫描与排除Druid自动配置
- 配置体系
- bootstrap.yml:端口、Nacos注册发现、配置中心、日志与管理端点
- application.yml:MyBatis拦截器规则(查询/更新)
- Flowable集成
- 使用Flowable Spring Boot Starter Process REST,引入引擎与REST API
- 通过RepositoryService、RuntimeService等进行流程部署、查询与运行时控制
- 业务枚举与Feign客户端
- WorkFlowBusinessEnum:业务键与类型映射
- FlowClient:对内提供REST调用接口,配合降级与统一配置
章节来源
- LemesServiceDmWorkflowServerApplication.java:10-19
- bootstrap.yml:1-50
- application.yml:1-13
- pom.xml(workflow-server):44-63
- WorkFlowBusinessEnum.java:1-86
- FlowClient.java:1-32
架构总览
下图展示工作流服务在微服务体系中的位置与关键交互:
图表来源
详细组件分析
引擎初始化与自动配置
- 启动类启用服务注册与Feign客户端,排除Druid自动配置以避免与业务数据源冲突
- Flowable通过starter引入,自动装配RepositoryService、RuntimeService、HistoryService等核心服务
- Nacos作为注册中心与配置中心,支持动态配置与服务治理
图表来源
章节来源
数据源配置与事务管理
- 数据源:使用Druid(排除自动配置由启动类控制),结合MyBatis Plus进行持久化
- 事务:运行时操作使用声明式事务,确保流程实例删除等关键操作的原子性
- 拦截器:通过application.yml配置MyBatis拦截器规则,限定查询/更新范围,提升安全性与可控性
图表来源
章节来源
缓存策略
- 当前实现未显式引入缓存中间件;流程图渲染与历史节点高亮通过实时查询与生成实现
- 建议在高频查询场景(如流程图节点解析、角色映射)引入Redis缓存,降低引擎与数据库压力
章节来源
工作流服务启动流程、服务注册与发现
- 启动类启用@EnableDiscoveryClient与@EnableFeignClients,结合bootstrap.yml中的Nacos配置,实现服务注册与远程调用
- 管理端点暴露,便于健康检查与运维
图表来源
章节来源
Flowable与Spring Boot集成模式
- 使用Flowable Spring Boot Starter Process REST,自动装配引擎与REST API
- 通过RepositoryService进行流程部署与查询,通过RuntimeService进行流程启动与变量管理
- 业务侧通过枚举与Feign客户端对接其他服务或内部模块
图表来源
- FlowRepositoryServiceImpl.java:46-57
- FlowRuntimeServiceImpl.java:25-27
- WorkFlowBusinessEnum.java:1-86
- FlowClient.java:22-32
章节来源
- pom.xml(workflow-server):44-63
- FlowRepositoryServiceImpl.java:1-503
- FlowRuntimeServiceImpl.java:1-83
- WorkFlowBusinessEnum.java:1-86
- FlowClient.java:1-32
自动配置与自定义配置选项
- 自动配置
- Flowable Starter自动装配引擎服务
- Nacos自动注册与配置拉取
- 自定义配置
- application.yml:MyBatis拦截器规则
- bootstrap.yml:端口、Nacos地址与命名空间、管理端点、日志路径与级别
- AsyncPoolConfig:自定义异步线程池参数
章节来源
引擎参数调优与性能监控
- 线程池调优
- AsyncPoolConfig提供核心/最大线程数、队列容量、拒绝策略等参数,建议根据并发峰值与CPU核数调整
- 日志与监控
- bootstrap.yml开启管理端点,便于健康检查与指标暴露
- 建议接入Prometheus/Grafana进行指标采集与可视化
- 数据库与连接池
- 使用Druid并结合业务DAO拦截器限制范围,减少误操作风险
- 流程图渲染
- 对高并发场景建议引入Redis缓存流程图元数据,减少BPMN模型解析开销
章节来源
故障排除
- 常见问题定位
- 流程实例不存在:运行时查询异常,需检查流程定义Key与实例ID
- 流程开启失败:校验流程Key、业务Key与变量,确认身份上下文设置
- 删除流程实例异常:检查事务传播与回滚原因
- 建议排查步骤
- 查看日志路径与级别
- 核对Nacos注册状态与配置拉取情况
- 检查数据库连接与事务一致性
章节来源
依赖关系分析
- 外部依赖
- Flowable:引擎与REST API
- Spring Cloud:服务注册与发现、配置中心
- MyBatis Plus:ORM与拦截器
- Druid:数据源与监控
- 内部模块
- workflow-common:公共枚举、异步线程池、Feign客户端
- workflow-server:应用入口、控制器、服务实现、资源文件
图表来源
章节来源
性能考虑
- 并发与线程池
- 根据业务峰值调整异步线程池大小与队列容量,避免拒绝策略导致的任务丢失
- 数据访问
- 利用DAO拦截器限制查询/更新范围,减少不必要的全表扫描
- 渲染与缓存
- 高频流程图渲染建议引入缓存,降低引擎解析成本
- 监控与告警
- 暴露管理端点,结合Prometheus/Grafana进行性能观测
故障排除指南
- 启动与注册
- 确认Nacos地址、命名空间与组配置正确
- 检查服务端口与健康检查端点
- 引擎与流程
- 校验流程Key与版本,确认流程已部署
- 检查变量传递与身份上下文设置
- 数据与事务
- 关注事务回滚原因,确保关键操作在事务边界内
- 日志与诊断
- 查看日志路径与级别,定位异常堆栈
章节来源
结论
本集成方案基于Flowable与Spring Boot,结合Nacos实现服务化与配置化,通过RepositoryService与RuntimeService完成流程生命周期管理。建议在生产环境中完善缓存策略、性能监控与告警体系,并持续优化线程池与数据访问策略,以满足高并发与高可用需求。
附录
- 前端Flowable初始化
- 前端BPMN Modeler提供基础流程XML模板初始化能力,便于快速构建流程图
章节来源