news 2026/6/12 21:24:58

换掉 Activiti 、Flowable!阿里开源流程引擎框架真香!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
换掉 Activiti 、Flowable!阿里开源流程引擎框架真香!

compileflow 是什么

compileflow 是一个非常轻量、高性能、可集成、可扩展的流程引擎。

compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。

compileflow 能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。

功能列表

  • 高性能:通过将流程文件转换生成 java 代码编译执行,简洁高效。

  • 丰富的应用场景:在阿里巴巴中台解决方案中广泛使用,支撑了导购、交易、履约、资金等多个业务场景。

  • 可集成:轻量、简洁的设计使得可以极其方便地集成到各个解决方案和业务场景中。

  • 完善的插件支持:流程设计目前有 IntelliJ IDEA、Eclipse 插件支持,可以在流程设计中实时动态生成 java 代码并预览,所见即所得。

  • 支持流程设计图导出 svg 文件和单元测试代码。

  • 支持基于 Java 反射和 Spring 容器的代码触发

快速上手

  • 引入 compileflow jar 依赖

<dependency> <groupId>com.alibaba.compileflow</groupId> <artifactId>compileflow</artifactId> <version>1.0.0</version> </dependency>
  • 使用 compileflow 绘制了简单的流程图

IDEA 插件

  • 查看编译出的流程业务 Java 代码(以下代码为 compileflow 自动根据流程图生成的)

public class PigFlow implements ProcessInstance { private java.lang.Integer price = null; public Map<String, Object> execute(Map<String, Object> _pContext) throws Exception { price = (Integer)DataType.transfer(_pContext.get("price"), Integer.class); Map<String, Object> _pResult = new HashMap<>(); decision8(); //AutoTaskNode: 付款 ((BizMock)ObjectFactory.getInstance("com.example.compileflow.bean.BizMock")).payMoney(price); _pResult.put("price", price); return _pResult; } private void decision8() { //DecisionNode: 计算费用 bizMockCalMoney(); if (price>=100) { //超过100 { //ScriptTaskNode: 春哥请客 腿打折 IExpressContext<String, Object> nfScriptContext = new DefaultContext<>(); nfScriptContext.put("price", price); price = (java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("price*2", nfScriptContext); } } else { //不超过100 { //ScriptTaskNode: 冷冷请客 打5折 IExpressContext<String, Object> nfScriptContext = new DefaultContext<>(); nfScriptContext.put("price", price); price = (java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("(round(price*0.5,0)).intValue()", nfScriptContext); } } } private void bizMockCalMoney() { price = ((BizMock)ObjectFactory.getInstance("com.example.compileflow.bean.BizMock")).calMoney(price); } }
  • 在设计好的 bpm 文件右键创建 单元测试

bpm单元测试

@Test public void testProcess() throws Exception { String code = "pig"; ProcessEngine<TbbpmModel> engine = ProcessEngineFactory.getProcessEngine(); System.out.println(engine.getJavaCode(code)); Map<String, Object> context = new HashMap<>(); context.put("price", 10); Map<String, Object> execute = engine.execute(code, context); System.out.println(execute); }
  • 执行流程单元测试,输出目标过程

假装在计算金额~~~~~~10 支付了~~~~~~5

总结

  • compileflow 极其容易上手,降低工作流学习的难度。

  • compileflow IDEA 设计插件在 2021 版本兼容性存在问题。

  • 自动生成的单元测试代码依赖版本较低不支持 Junit5

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 17:06:02

第二届人工智能赋能数字创意设计国际学术会议(AIEDCD 2026)意大利会场

第二届人工智能赋能数字创意设计国际学术会议 (AIEDCD 2026) 将于2026年3月27-29日在中国北京&意大利召开。会议主要围绕人工智能与数字创意设计等研究领域展开讨论。会议旨在为从事相关研究领域的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&…

作者头像 李华
网站建设 2026/6/12 17:42:29

盐酸胍法辛Guanfacine常见副作用管理:镇静作用、低血压与停药反跳现象

盐酸胍法辛在治疗ADHD过程中&#xff0c;镇静作用、低血压及停药反跳现象是临床管理的三大挑战。通过分级干预策略与多学科协作&#xff0c;可显著降低不良反应对生活质量的影响。镇静作用&#xff1a;时间优化与行为干预镇静作用是胍法辛最常见的不良反应&#xff0c;发生率超…

作者头像 李华
网站建设 2026/6/10 12:28:06

Spring的反射与动态代理

1. Spring 反射与动态代理Spring 框架广泛使用反射和动态代理机制来增强灵活性与可扩展性&#xff0c;特别是在实现 AOP&#xff08;面向切面编程&#xff09;和动态 Bean 配置时。反射允许在运行时获取类的元数据并动态操作对象&#xff0c;而动态代理则允许在运行时创建代理对…

作者头像 李华
网站建设 2026/6/12 4:19:13

学霸同款9个AI论文平台,助你轻松搞定本科生毕业论文!

学霸同款9个AI论文平台&#xff0c;助你轻松搞定本科生毕业论文&#xff01; AI 工具助力论文写作&#xff0c;告别熬夜苦战 对于本科生而言&#xff0c;撰写毕业论文是一项既重要又棘手的任务。从选题到成稿&#xff0c;每一个环节都充满了挑战。而随着 AI 技术的不断发展&…

作者头像 李华
网站建设 2026/6/10 11:47:26

基于单片机的彩灯控制系统

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究的主要内容二、彩灯的方案设计3.1彩灯常见的工作模式3.2彩灯的设计方案以及工作原理3.2.1彩灯的设计方案3.2.2彩灯的工作原理3.4彩灯效果图 三、设计3.1 plc机型的选择3.2 程序框图 概要 随着社会经济和科…

作者头像 李华