当前位置: 首页 > news >正文

SpringBoot 2.6.2 + Flowable 6.7.2 整合避坑指南:从MySQL驱动版本到流程图中文乱码

SpringBoot 2.6.2与Flowable 6.7.2深度整合实战:从环境配置到流程设计全解析

在企业级应用开发中,工作流引擎的选择与整合往往决定了业务流程的灵活性与开发效率。本文将带您深入探索SpringBoot 2.6.2与Flowable 6.7.2的整合过程,不仅解决常见的技术难题,更提供一套可复用的最佳实践方案。

1. 环境准备与基础配置

1.1 版本选择与依赖管理

SpringBoot与Flowable的版本兼容性至关重要。经过多次验证,我们确定以下组合最为稳定:

<properties> <flowable.version>6.7.2</flowable.version> <spring-boot.version>2.6.2</spring-boot.version> </properties>

核心依赖配置如下:

<dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter</artifactId> <version>${flowable.version}</version> </dependency>

注意:避免同时引入flowable-spring-boot-starter和单独的flowable模块,这可能导致自动配置冲突。

1.2 数据库配置要点

MySQL 8.0驱动与Flowable的整合需要特别注意字符集设置:

spring: datasource: url: jdbc:mysql://localhost:3306/flowable_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: yourpassword driver-class-name: com.mysql.cj.jdbc.Driver

常见问题解决方案:

  • 建表失败:临时降级到MySQL 5.1.45驱动完成初始化后,可切换回8.0驱动
  • 连接超时:增加&connectTimeout=3000&socketTimeout=30000参数
  • 时区问题:务必设置serverTimezone参数

2. 核心配置与流程部署

2.1 基础配置参数

application.yml中的关键配置:

flowable: async-executor-activate: false # 开发环境关闭异步执行器 database-schema-update: true # 自动更新数据库结构 process-definition-location-prefix: classpath:/processes/ check-process-definitions: true

2.2 流程定义与部署

推荐的项目结构:

src/main/resources ├── processes │ ├── expense-process.bpmn20.xml │ └── approval-process.bpmn20.xml └── diagrams # 流程图图片资源

示例流程定义(部分):

<process id="expenseProcess" name="费用报销流程" isExecutable="true"> <startEvent id="startEvent" /> <userTask id="fillExpense" name="填写报销单" flowable:assignee="${applicant}" /> <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="fillExpense" /> </process>

部署验证方法:

  1. 启动应用检查ACT_RE_PROCDEF表
  2. 访问/actuator/flowable端点(需开启Actuator)
  3. 使用RepositoryService API查询部署列表

3. 流程可视化与UI整合

3.1 Flowable Modeler整合步骤

  1. 静态资源准备

    • 从Flowable GitHub仓库下载前端资源
    • 放置到resources/static/modeler目录
  2. 依赖添加

<dependency> <groupId>org.flowable</groupId> <artifactId>flowable-ui-modeler-rest</artifactId> <version>${flowable.version}</version> </dependency>
  1. 安全配置调整
@Configuration @Order(SecurityProperties.BASIC_AUTH_ORDER - 1) public class ModelerSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/modeler/**").permitAll(); } }

3.2 中文乱码解决方案

创建配置类解决流程图生成乱码:

@Configuration public class FlowableConfig implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> { @Override public void configure(SpringProcessEngineConfiguration config) { config.setActivityFontName("SimSun"); config.setLabelFontName("SimSun"); config.setAnnotationFontName("SimSun"); } }

字体配置对照表:

属性推荐值说明
activityFontName宋体/SimSun活动元素字体
labelFontName宋体/SimSun标签字体
annotationFontName宋体/SimSun注释字体

4. 通用审批流程设计实践

4.1 可复用流程设计

通用审批流程应包含以下核心节点:

  1. 开始节点:初始化流程变量
  2. 审批任务:动态指定处理人
  3. 修改环节:驳回时返回申请人
  4. 网关控制:根据审批结果路由

关键XML配置示例:

<userTask id="approvalTask" name="审批" flowable:assignee="${approver}"> <extensionElements> <flowable:taskListener event="create" class="com.example.flow.listener.ApprovalTaskListener" /> </extensionElements> </userTask>

4.2 业务集成方案

推荐的数据模型设计:

CREATE TABLE `work_order` ( `id` varchar(36) NOT NULL, `business_type` varchar(50) NOT NULL, `business_key` varchar(100) NOT NULL, `status` varchar(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

集成步骤:

  1. 创建业务工单
  2. 设置流程变量
  3. 启动流程实例
  4. 绑定业务ID与流程ID

4.3 多数据源处理策略

当同时使用Flowable和MyBatis时,建议采用以下方案:

@Configuration @MapperScan(basePackages = "com.example.mapper", sqlSessionFactoryRef = "businessSqlSessionFactory") public class BusinessDataSourceConfig { @Bean(name = "businessDataSource") @ConfigurationProperties(prefix = "spring.datasource.business") public DataSource businessDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "businessSqlSessionFactory") public SqlSessionFactory sqlSessionFactory( @Qualifier("businessDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } }

5. 实战技巧与性能优化

5.1 常见问题排查指南

问题现象可能原因解决方案
流程定义未部署文件位置错误检查resources/processes目录
任务分配不生效变量未设置调试变量${approver}的值
流程图乱码字体配置缺失配置中文字体
事务不回滚异步执行启用关闭async-executor-activate

5.2 性能优化建议

  1. 数据库层面

    • 为ACT_RU_TASK添加business_key索引
    • 定期归档历史数据
  2. 应用层面

    // 批量查询优化示例 List<Task> tasks = taskService.createTaskQuery() .taskAssignee(userId) .orderByTaskCreateTime().desc() .listPage(0, 100);
  3. 缓存策略

    • 对频繁访问的流程定义启用缓存
    • 使用Redis缓存用户任务列表

6. 扩展应用与进阶技巧

6.1 动态表单集成

结合Vue+ElementUI实现动态表单:

  1. 设计表单JSON模板
  2. 前端渲染引擎解析
  3. 后端存储表单数据
{ "fields": [ { "type": "input", "label": "报销金额", "model": "amount", "rules": [{ "required": true, "type": "number" }] } ] }

6.2 消息通知方案

集成消息通知的监听器示例:

public class NotificationTaskListener implements TaskListener { @Override public void notify(DelegateTask task) { String assignee = task.getAssignee(); String message = "您有新的待办任务:" + task.getName(); notificationService.send(assignee, message); } }

通知方式对比:

方式实时性实现复杂度适用场景
WebSocket内部系统
邮件跨组织协作
短信紧急通知

在实际项目中使用SpringBoot整合Flowable时,最大的体会是合理规划流程定义与业务系统的边界。将业务流程中变化频繁的部分抽象到流程定义中,而稳定的业务规则保持在代码层面,这种平衡能显著提高系统的可维护性。

http://www.jsqmd.com/news/728805/

相关文章:

  • 2026年四川防水补漏公司top5:屋面防水补漏,屋顶防水补漏,成都防水公司,本地防水补漏公司,实力盘点! - 优质品牌商家
  • 2026AI大模型API聚合服务揭秘:五款主流中转服务性能大比拼与接入攻略
  • Steam游戏破解难题:如何用自动化工具轻松绕过DRM限制
  • 微米级探针如何“看穿“半导体超浅结 | 四探针间距对方阻测量的影响
  • 用Matlab搞定毕业论文图表:从数据到直方图、散点图、箱线图的完整复盘
  • 从计算机小白到AI大模型工程师:我的3个月独家学习路线,收藏必备!
  • 【 Godot 4 学习笔记】数组(Array)
  • 为什么千兆网线频率只有62.5MHz 低频跑高速的物理层原理
  • 对比使用Taotoken前后在模型选型与切换上的效率提升感受
  • 将8088 BootLoader分拆烧写到8086 ROM中
  • 启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十三)
  • 别再问脚本是啥了!从浏览器油猴插件到Python自动化,5分钟搞懂脚本的N种玩法
  • SwiftVLA:轻量化VLA模型的4D时空优化技术解析
  • 20nm模拟IC设计挑战与Tanner EDA实战技巧
  • 2026年收藏AI降重神器:高效助力论文查重从雷区到安全区 - 降AI实验室
  • 05_yolox_s的后处理截断并导出onnx
  • 全自动油水分离器技术解析与选型实操推荐:诸城,山东油脂回收设备厂家,矿山污水处理设备,实力盘点! - 优质品牌商家
  • 思源宋体CN免费开源字体完整指南:7种字重一站式解决方案
  • 运维监控POC怎么做才不踩坑?我踩过的5个坑和一份验证清单
  • 浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
  • 拆解汽车电源管理芯:TLF35584的MPS、ENK/WAK引脚配置全解析,从硬件设计到软件初始化
  • 【西瓜带你学Kafka | 第八期】 Kafka的主从同步、消息可靠性、流处理与顺序消费(文含图解)
  • 2026成都阳台防水补漏技术解析与商家选择推荐 - 优质品牌商家
  • 深度学习齿轮箱故障诊断与寿命预测【附代码】
  • STBDAI7220数字输入模块
  • 2026年卡通书包定制厂家怎么选:幼儿园书包定制/开学书包定制/托管班书包定制/拉杆书包定制/男士商务包定制/皮质商务包定制/选择指南 - 优质品牌商家
  • DP World Tour欧洲巡回赛携手HCLTech重建官网与球迷应用
  • 告别固定类别!用YOLO-World+自定义词汇,5分钟打造你的专属物体检测器
  • 工业物联网网关IOT-LINK硬件架构与软件生态解析
  • SoC FPGA在汽车雷达数字信号处理中的优势与应用