Java开源工作流框架对比

article/2025/9/30 10:28:17

什么是工作流?

工作流,是指“业务​过程的部分或整体在​计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。

在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。

工作流是复杂版本的状态机

就好比一般的请假流程,小明会先提出请假申请,然后由Leader审批或者Manager进行审批,直至审批通过或者拒接。

如果让我们实现请假单状态的切换,那么用一个字段来标识就可以了。

然而对于复杂的状态或者状态维度增加且状态流转的条件极为复杂,可能单纯用字段记录状态的实现方式就会不那么理想。

工作流解决的痛点在于,解除业务宏观流程和微观逻辑的耦合,让熟悉宏观业务流程的人去制定整套流转逻辑,而让专业的人只需要关心他们应当关心的流程节点,就好比大家要一起修建一座超级体育场,路人甲只需要关心他身边的这一堆砖是怎么堆砌而非整座建筑。

Java工作流开源框架

目前主流的开源框架就是Activiti/Camunda/Flowable,它们都源自于jbpm。

先是有了jbpm4,随后出来了一个Activiti5,Activiti5经过一段时间的发展,核心人员出现分歧,又分出来了一个Camunda。

activiti5发展了4年左右,紧接着就出现了Flowable。

下面我们就来分别简单认识下这三兄弟

一、简介

Activiti

Activiti 是一个针对业务人员、开发人员和系统管理员的轻量级工作流和业务流程管理 (BPM) 平台。 它的核心是一个用于 Java 的超快速和坚如磐石的 BPMN 2 流程引擎。 它是开源的,并在 Apache 许可下分发。 Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。 它与 Spring 完美集成,非常轻量级,基于简单的概念。

Activiti Cloud 现在是新一代的业务自动化平台,提供一组旨在在分布式基础架构上运行的云原生构建块。

github地址:https://github.com/Activiti/Activiti

主要服务类:

调用方式:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService(); 
RepositoryService repositoryService = processEngine.getRepositoryService(); 
TaskService taskService = processEngine.getTaskService(); 
ManagementService managementService = processEngine.getManagementService(); 
IdentityService identityService = processEngine.getIdentityService(); 
HistoryService historyService = processEngine.getHistoryService(); 
FormService formService = processEngine.getFormService(); 
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

设计器

activiti6 官方提供有Web设计器(Modeler设计器)。部署运行activiti-modeler模块即可使用.

activiti7 推荐使用bpmn.io提供的bpmn-js设计器,在线使用地址:https://demo.bpmn.io/new

Flowable

Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据

github地址:https://github.com/flowable/flowable-engine

主要服务类:flowable服务类和activiti类似,没有太大的变化

设计器:eclipse插件,支持5.x版本,不支持6.x版本中新增加的节点和属性,online web设计器基于AngularJs1.x版本开发, 如下:

兼容性:

  • Alfresco Activiti5
  • Flowable5

Camunda

Camunda 是一个基于 Java 的框架,支持用于工作流和流程自动化的 BPMN、用于案例管理的 CMMN 和用于业务决策管理的 DMN。

github地址:https://github.com/camunda/camunda-bpm-platform

工作原理:

设计器

兼容性:

  • Active BPEL
  • Alfresco Activiti
  • Appian BPM
  • Bonitasoft
  • JBoss jBPM
  • IBM WPS / IBM BPM / IBM MQ Workflow / IBM Lotus Notes
  • Oracle BPM
  • Software AG Webmethods
  • Pega BPM

二、支持DB对比

三、功能对比

  • Flowable VS Activiti

小结:

Flowable的核心思想更像是在做一个多彩的工具,它在工作流的基础功能上,提供了很多其他的扩展,使用者可以随心所欲地把Flowable打造成自己想要的样子

Activiti7着重于处理bpmn,它的方向在于云,他的设计会尽量像例如Spring Cloud、Docker、K8S靠拢。

Flowable在功能上比Activiti更加完善,基础轮子也更加全面。所以在开发契合国内特色的工作流系统中,Flowable是更佳的选择。

目前两者陆续都开始了商业化,同时也都支持了分布式和云端部署。

  • Flowable VS Camunda

小结:

Flowable从6.4.1版本开始大力发展其商业版产品,开源版本也不在及时维护。部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、es等等。

dmn目前是个半成品,没有Camunda稳定和好用,对于dmn规范支持薄弱。部分商业版的组件被商业化,因此开源版不再维护。Mongdb目前也放到商业产品中了,开源版的几乎不能用。

在高并发场景下,Camunda性能比Flowable要好些,报错的几率也低很多。

四、社区活跃度对比

Flowable

Activiti

Camunda

小结:从github活跃度来看, activiti和flowable比较相似,camunda最不活跃(可能是过去国人关注的少,中文文档也欠缺)。

总结:

在微服务、云计算、服务编排、LCDP等大环境下,camunda的前景优势会慢慢体现出来,作为下一代的工作流引擎,也会逐渐引起更多人的关注。

Activiti和Flowable作为传统的工作流引擎,其设计思想和理念还是很值得CRUD boy们去学习研究下的。

参考链接:

Camunda Platform documentation | docs.camunda.org

https://github.com/camunda/camunda-bpm-platform

Activiti User Guide

Introduction - Activiti & Activiti Cloud Developers Guide

https://github.com/Activiti/Activiti

Camunda/Flowable/Activiti技术发展史/盘古BPM框架对比最新版_分享牛-CSDN博客_camunda flowable 对比

Flowable Enterprise Documentation

https://github.com/flowable/flowable-engine

由于java编程语言本身的强大性,导致学习它需要掌握极其庞大的知识群。今天就带大家了解一下什么是java的工作流,以及为大家介绍一下哪些工作流框架比较好。

简单来说,java工作流就是一个基于java开发的流程框架,一般情况下,好的工作流在开发时是不需要写代码的,直接配置就可以了。它一般在OA系统应用的频率比较高。

那么哪些工作流框架比较好呢?

首先Activiti、JBPM、JBoss Seam、XJR java这些快速开发平台都是很不错的,接下来会为大家详细介绍它们各自的特点。

第一种是Activiti。它上手比较快,界面也比较简洁、直观,学习周期相对较短。同时官方提供webapp

war包,部署在Tomcat下可快速操作和了解activiti,esclipse提供支持activiti项目的ide插件,总的来说环境支持良好。还有一个特点就是它的代码量大。虽然核心代码改动难度较大,但提供了完整的技术文档,架构良好,网上开发文档较多,一定程度上降低了二次开发的难度。

第二种是JBPM(Java Business Process Management)。它是java业务流程管理,是一个可扩展、灵活、开源的流程引擎,它可以运行在独立的服务器上或者嵌入任何java应用中。同时它有不同的类别。其中jBPM3是一个完整的工作流系统实现,主要是面向开发人员,目的在于简化对组织核心流程进行支撑的软件创建,但是它不支持标准。另外jBPM4引入PVM,使其拥有更强大的扩展性,同时增加BPMS特性,这些特性包括了对BPMN的支持、面向业务人员的Web建模器和简单统计分析功能的加入。最后jBPM5基于原先的Drools

Flow,支持BPMN,通过与Drools的合并支持BAM,通过内容仓库增加对流程可视化的支持。由于放弃了jBPM4的PVM,引擎的可扩展性受到损害,并且不再支持jPDL。

cbd035c79b67518a75e0641ff70f1e07.png

第三种是JBoss Seam,它可以称之为java开源框架里面最优秀的快速开发框架之一。

对于程序员而言,Seam是一个非常不错的选择,要比用

Spring/Hibernate/Struts省心的多,更能够把精力放在业务逻辑的编写上面,开发效率也很不错,所以它当之无愧是java开源框架里面最优秀的快速开发框架之一了。

最后一种是XJR

java快速开发框架。它的工作流程引擎是采用主流的Activiti工作流引擎,遵循bpmn规范,可实现XML、Json一键导入导出,以及添加了人员动态选择、便捷式会签设置、便捷式任务委托设置、添加自定义表单、自定义节点按钮、动态变量选择(包括会签变量、按钮变量、表单变量)以及各节点属性优化,遵循以客户为中心的优化原则,将整个流程的操作变得简单、快捷,实现0基础客户短时间可自由编辑流程模板。

40444af3c3af3096da975d6c99065ca1.png

综上所述,java工作流框架还是有几款非常不错的供大家选择,关于更多java基础,敬请关注奇Q工具网。

推荐阅读:


http://chatgpt.dhexx.cn/article/KUumv0hm.shtml

相关文章

极简 Java 工作流概念入门

1. 为什么需要工作流 假设我有一个请假需求,流程如下: 请假可以提交给我的上司,上司可以选择批准或者拒绝,无论批准还是拒绝,都会给我一个通知。 这个流程比较简单,我们很容易想到解决方案,不…

Java工作流详解(附6大工作流框架对比)

目录 1.什么是工作流 2.工作流应用场景 3.工作流实现方式 4.有哪些工作流框架? 5.1.Activiti6. 2.Flowable7. 3.Camunda8.4.jBPM9. 5.osworkflow,6.jflow. 10.工作流框架对比 什么是工作流工作流(Worklow) 工作流是对工作流程及其各操作步骤之间业务规则的…

smalldatetime类型

1、MS Sql Server 的smalldatetime 与datetime类型的区别 原来数据库字段为smalldatetime类型, update table set column 11:59:30 发现commit后db中的值为12:00:00 update table set column 11:59:29 发现commit后db中的值为11:59:00 原来smalldatetime是不存储秒…

SQL Server中smalldatetime的日期范围为何是[1900-01-01,2079-06-06]

本文目录列表: 1、SQL Server中的基准日期 2、smalldatetime的日期范围 3、smalldatetime的日期范围和无符号2字节整数的关系 4、总结语 5、参考清单列表 SQL Server中的基准日期 SQL Server 中针对datetime和smalldatetime这两个日期时间数据类型提供一个基准日期&…

smalldatetime mysql_SQL 中 date 与datetime的区别

潇潇雨雨 我们看看这几个数据库中(mysql、oracle和sqlserver)如何表示时间mysql数据库:它们分别是 date、datetime、time、timestamp和year。date :“yyyy-mm-dd”格式表示的日期值 time :“hh:mm:ss”格式表示的时间值 datetime:…

SQL datetime和smalldatetime区别

datetime 存储大小8个字节,精确到分后的3为小数,日期范围从1753 年 1 月 1 日到 9999 年 12 月 31 日;而 smalldatetime存储大小为4个字节,精确到分,日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日。 参考 http://m…

170406回顾-SQL Server的smalldatetime类型比较

在比较SQL Server的类型为smalldatetime字段时出现下面的错误:将 expression 转换为数据类型 smalldatetime 时出现算术溢出错误 正确的比较方法如下:将long型转换为时间格式的字符串,再与smalldatetime类型的字段比较 SELECT * FROM tablename WHERE EditFlag > 2017/…

【SQL Server】将字符串转换为 smalldatetime 数据类型时失败

如下图,我在执行下列语句时遇到了“将字符串转换为 smalldatetime 数据类型时失败”的报错 然后去搜了一下,原来是存储过程的问题,我看的是其他博主的解答(但是还没有按照博主的方法实践过),内容详情有需要的自己去搜一…

android笔记1(activity跳转)

1.利用Android studio创建一个新项目,项目结构如下。 2.创建一个新的activity,用于跳转。 3.修改两个activity的布局,主activity中有一个输入文本框和一个按钮,实现点击按钮发送文本框的内容到第二个activity。第二个activity中有…

Activity 跳转的生命周期变化

1)Activity1跳转到Activity2的生命周期流程 1.Activity1启动:Activity1: onCreate()Activity1: onStart()Activity1: onResume()2.点击按钮跳转到Activity2:Activity1: onPause()Activity2: onCreate()Activity2: onStart()Activity2: onResume()Activit…

android activity跳转生命周期,Android中从一个Activity跳转到另一个Activity所经历的生命周期........

凡是Android开发人员都知道“Activity”是非常重要的;对其该“Activity”生命周期相信大家也比较熟悉了。 这篇文章主要探讨的是“从一个Activity启动跳转到另一个Activity中,所经历的生命周期中的过程” 实例: 1、MainActivity 启动 Secon…

Android开发之Activity(实现Activity跳转)

文章目录 基本框架新建activity实现activity跳转 基本框架 首先,每当我们新建一个APP工程,AS都会默认为我们创建一系列文件,比如MainActivity.java,该activity就是用户打开APP时默认弹出的activity,且该类一定要继承自…

activity跳转

1. 显示跳转 <Buttonandroid:layout_width"wrap_content"android:layout_centerHorizontal"true"android:layout_marginTop"20dp"android:text"页面跳转"android:onClick"intentClick"android:layout_height"wrap_c…

Android activity跳转使用详解

画面就是活动卡片,就是activity 继承 AppCompatActivity 的才是activity,否则就是一个普通的java类 案例:实现activity跳转 一 步骤 step1 new一个新的activity step2 看一下AndroidManifest.xml是否配置了新的activity step3 在MainActivity.java 里添加点击事件,跳转到acti…

Android Activity跳转

实现点击按钮&#xff0c;发送消息并跳转到另一个Activity MainActivity添加SendMessage方法 const val EXTRA_MESSAGE "com.example.myfirstapp.MESSAGE"class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super…

Activity跳转和Intent传值

Activity跳转和传值 1.重点内容 1.重点内容 Activity之间的跳转及数据传递&#xff08;如何跳转&#xff1f;如何返回&#xff1f;&#xff09;使用Intent在Activity之间传递数据&#xff09;&#xff08;单向和双向&#xff1f;&#xff09;回传数据&#xff08;怎么回传和…

android跳转界面动画,Android Activity跳转动画效果

Activity的跳转动画在5.0的时候做了一个重大的突破,下面来看一下吧 1.5.0之前的overridePendingTransition 相信大家对OverridePendingTransition还是很熟悉的,使用方法也是很简单就是 //fade_in是第二个界面的进入动画,fade_out是第一个界面退出动画,不想动画传入0 overri…

Activity之间跳转实现--安卓作业2

一.要求分析 目前已经利用adapter实现了将数据传输recycleview界面。这次作业主要是利用intent传递参数并实现activity之间的跳转 1.在Adapter中的内部类viewholder中设置一个监听&#xff0c;用于recyclerview中每一个item myviewholder.textView.setOnClickListener(new …

Activity的三种跳转

一个界面跳转到另一个界面&#xff0c;这就Activity的跳转。我们在开发中常见的跳转有三种。普通跳转、有返回值的跳转、透传跳转。我们先来看一种。 1 . Activity的普通跳转&#xff08;传值跳转&#xff09; 这个跳转是最简单的 Intent intentnew Intent(); intent.setCla…

如何使用正则表达式对输入数字进行匹配详解

前言&#xff1a; 最近有一个区间范围限制&#xff0c;一般255数字以下的都能在网上薅到&#xff0c;但是需要弄一个int16、int32、int64范围的输入限制......在网上逛了很久都没找到&#xff0c;基本都是从0开始教学那种&#xff0c;我又不想看&#xff0c;觉得写的范围太大了…