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

spring boot 3.5+flowable7+java 21流程引擎测试程序

一、搭建flowable-ui

docker pull flowable/flowable-ui docker run -d --restart=always --name flowableui -p 8086:8080 flowable/flowable-ui

http://localhost:8086/flowable-ui访问页面,默认账号admin,密码test
二、画流程,并下载xml文件

三、搭建后端
1、添加maven依赖

<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter</artifactId> <version>7.2.0</version> </dependency> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.52</version> </dependency>

2、新建线程池类AnsycConfig

package com.example.flowable_eng.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ThreadPoolExecutor; @Configuration public class AnsycConfig { @Bean("applicationTaskExecutor") public ThreadPoolTaskExecutor applicationTaskExecutor() { ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor(); //此方法返回可用处理器的虚拟机的最大数量; 不小于1 int core= Runtime.getRuntime().availableProcessors(); executor.setCorePoolSize(core);//设置核心线程数 executor.setMaxPoolSize(core * 2 + 1);//设置最大线程数 executor.setKeepAliveSeconds(120);//除核心线程外的线程存活时间 executor.setQueueCapacity(120);//如果传入值大于0,底层队列使用的是LinkedBlockingQueue,否则默认使用SynchronousQueue executor.setThreadNamePrefix("thread-default-execute");//线程名称前缀 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//设置拒绝策略,抛出 RejectedExecutionException来拒绝新任务的处理。 // executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//设置拒绝策略,使用主线程 // executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());//设置拒绝策略,直接丢弃掉 // executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());//设置拒绝策略,丢弃最早的未处理的任务请求。 return executor; } }

3、yml配置文件

server: port: 2300 spring: threads: virtual: enabled: true #配置数据源 datasource: #MySQL driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/flowable_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root password: xxxxxx hikari: max-lifetime: 70000 flowable: # 开启定时任务JOB async-executor-activate: true # 在引擎启动时,会自动更新数据库架构 database-schema-update: true

4、在resources文件夹下,新建文件夹bpmn,用于存放流程xml文件

5、新建IService和Impl
5.1 服务接口IFlowableService

public interface IFlowableService { //初始化流程 String initFlowable(); //获取所有流程实例 List<JSONObject> queryAllDeployedProcesses(); }

5.2 实现类FlowableServiceImpl

package com.example.flowable_eng.service.impl; import com.alibaba.fastjson2.JSONObject; import com.example.flowable_eng.service.IFlowableService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.*; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.DeploymentBuilder; import org.flowable.engine.repository.ProcessDefinition; import org.springframework.context.annotation.Lazy; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.util.ArrayList; import java.util.List; @Service @Slf4j public class FlowableServiceImpl implements IFlowableService { @Resource @Lazy private RepositoryService repositoryService; @Resource @Lazy private RuntimeService runtimeService; @Resource @Lazy private TaskService taskService; @Resource @Lazy private HistoryService historyService; @Resource @Lazy IdentityService identityService; @Override @Transactional(rollbackFor = Exception.class) public String initFlowable() { try { // 获取bpmn文件夹的所有.bpmn20.xml文件 ClassPathResource bpmnFolder=new ClassPathResource("bpmn/"); File[] files= bpmnFolder.getFile().listFiles((dir, name) -> name.endsWith(".bpmn20.xml")); if (files != null && files.length > 0) { // 创建部署对象 DeploymentBuilder deploymentBuilder= repositoryService.createDeployment(); for (var file : files) { // 添加BPMN文件到部署 deploymentBuilder.addInputStream(file.getName(), file.toURI().toURL().openStream()); } // 执行部署 Deployment deployment= deploymentBuilder.deploy(); return deployment.getId(); } }catch (Exception ex){ ex.printStackTrace(); } return "OK"; } @Override public List<JSONObject> queryAllDeployedProcesses() { List<JSONObject> jsonObjects = new ArrayList<>(); // 查询所有流程定义 List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery() .orderByProcessDefinitionKey().asc() // 按流程定义的 Key 排序 .latestVersion() // 只查询每个流程定义的最新版本 .list(); // 打印所有已部署的流程的 key 和 name for (ProcessDefinition processDefinition : processDefinitions) { JSONObject object=new JSONObject(); object.put("id", processDefinition.getId()); object.put("key", processDefinition.getKey()); object.put("name", processDefinition.getName()); object.put("version", processDefinition.getVersion()); jsonObjects.add(object); } return jsonObjects; } }

6、新建控制器类FlowableTestController

package com.example.flowable_eng.controller; import com.alibaba.fastjson2.JSONObject; import com.example.flowable_eng.service.IFlowableService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/flowableTest") public class FlowableTestController { @Resource @Lazy private IFlowableService flowableService; //初始化流程 @GetMapping("/initFlowable") public String initFlowable(){ return flowableService.initFlowable(); } //查询所有的流程实例 @GetMapping("/queryAllDeployedProcesses") public List<JSONObject> queryAllDeployedProcesses(){ return flowableService.queryAllDeployedProcesses(); } }

7、前端可用@flowable/vue​ ,是 Flowable 官方提供的 Vue 插件,支持 Vue 2.x 和 Vue 3.x 版本,后续我还会更新

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

相关文章:

  • TVA在精密制造领域的应用案例(11)
  • LFM2.5-1.2B-Thinking-GGUF惊艳效果:在无微调条件下,对半导体工艺术语解释准确率达91.7%
  • 零基础也能搞定!gte-base-zh嵌入模型一键部署与相似度比对实战
  • ArduinoJoystickLibrary 按钮映射完全教程:32个按钮的智能配置技巧
  • EcomGPT-7B实战教程:电商ERP系统对接Gradio API实现商品信息自动填充
  • WindowsCleaner:快速解决C盘爆红的终极免费工具
  • 如何在iOS 15-16上快速绕过iCloud激活锁:applera1n完整指南
  • 降AI率工具哪个好?三款主流工具实测对比看完不再纠结
  • Python一键批量合并多个Excel表格,职场办公高效神器
  • 4.我看了问题汇总,还是不会打开/不会导入原理图怎么办?
  • MySQL主从延迟诊断与优化实战
  • Translumo屏幕翻译工具:打破语言障碍的智能解决方案
  • nomic-embed-text-v2-moe实战教程:嵌入向量持久化到FAISS/Chroma向量库
  • Fish-Speech-1.5儿童语音合成效果展示
  • GME-Qwen2-VL-2B-Instruct快速上手:图文匹配工具与Notion/Airtable双向同步方案
  • Claude读论文系列(十)
  • 降AI率工具哪个好用?嘎嘎降AI vs 比话降AI vs 率零深度PK
  • 从游戏存档到网络通信:详解Unity C#中拆装箱对性能的实际影响与解决方案
  • Qwen3-14B私有镜像赋能Notepad++等轻量编辑器:实现基础AI编程辅助
  • 终极解决方案:Scroll Reverser如何彻底解决Mac滚动方向混乱问题
  • YOLOv1深度解析:核心知识点、优势与局限
  • 探秘向量引擎新玩法:API、Key中转站震撼升级,零基础也能秒建高效AI系统
  • 多年没写代码的管理者,用AI重出江湖?先别急
  • 多模态AI飞书助手:星图平台Qwen3-VL+Clawdbot完整部署教程
  • Realistic Vision V5.1虚拟摄影棚完整指南:从硬件选型到生成质量调优
  • AIGlasses OS Pro 智能视觉系统安装包制作与分发:为企业客户部署私有化视觉方案
  • Gemma-3-12B-IT精彩案例分享:从初学者提问到完整函数实现的全过程
  • nginx的子路径的重写替换全攻略
  • AI时代,需求拆清楚了,为什么还要给新人做?
  • C++ 继承详解:从入门到深入