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

article/2025/9/30 10:45:32

目录

1.什么是工作流

2.工作流应用场景

3.工作流实现方式

4.有哪些工作流框架?

5.1.Activiti6. 2.Flowable7. 3.Camunda8.4.jBPM9. 5.osworkflow,6.jflow.

10.工作流框架对比

什么是工作流工作流(Worklow)

工作流是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如前后组织在一起的逻辑和规则,在计算机中以恰当的模型表逢并对其实施计算。工作流要解决的主要问题是: 为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

那么再简单点说,我认为工作流就是对业务的流程化抽象,WFMC给出了工作流参考模型如下:

工作流应用场景

具体场景,凡是涉及到业务流程的所有场景

。关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等。行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。。人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等.。客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。

工作流实现方式目前常见的工作流程有两种方式:

。通过状态字段实现流程控制。原始,适合简单流程控制。

。工作流引擎实现流程控制。适用场景更广泛,扩展性更好

有哪些工作流框架?

目前市面上主流的开源流程引擎主要有 Activiti、Flowable,CamundajBPM,jflow, oworkflow等。现在我们对这些开源流程框架进行调研和分析。

    1. Activiti

Activiti 由 Alfresco 公司开发,目前最高版本为 Activiti cloud 71.0

其中 activiti5 和 activiti6 的核心 leader 是 Tijs Rademakers,由于团队内部分歧,2017 年 Tijs Rademakers 离开团队,创建

了后来的 Flowable。

activiti6 以及 activiti5 代码则交接给 Salabov 团队维护,activiti6 以及 activiti5 的代码官方已经暂停维护。往后 Salaboy 团开发了 activiti7 框架,ativiti7 内核使用的还是 activiti6,并没有为引擎注入更多的新特性,只是在 Activiti 之外的上层封装了

些应用。

直到 Activiti cloud710版本,Activiti coud 将系统分为 Runtime Bundle、 Audit Service  Query Service、 CloudConnectors、Application Service、 Notification Service。这些工作的主要目的其实就是为了上云,减少对 Activiti 依赖的糖合,需要使用Activiti的系统只需要通过调用 http 接口的方式来实现工作流能力的整合,将工作流业务托管上云2.Flowable

    1. Flowable

是基于activiti6 衍生出来的版本,目前最新版本是v6.7.0

开发团队是从Activiti 中分裂出来的,修复了一众activiti6 的 bug,并在其基础上实现了 DMN 支持,BPEL 支持等。

相对开源版,其商业版的功能会更强大。Flowable 是一个使用Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。2016年10月,Activiti工作流擎的主要开发者离开 Alfresco 公司并在 Activiti分支基础上开启了 Flowable 开源项目。Flowable 项目中包括 BPMN (Business Process Model and Notation)引擎CMMN (Case Management Modeland Notation)引擎、DMN (Decision Model and Notation) 引擎和表单引擎 (Form Engine) 等模块。

    1. Camunda

Camunda 基于activiti5,所以其保留了 PVM,最新版本Camunda7.17,开发团队也是从activiti 中分裂出来的,发展轨与Flowable 相似。

通过压力测试验证 Camunda BPMN 引擎性能和稳定性更好。功能比较完善,除了BPMN,Camunda 还支持 CMMN(案例管理)和 DMN (决策自动化)。Camunda 不仅带有引擎,还带有非常强大的工具[6],用于建模、任务管理、操作监控和用户管理

    1. jBPM

BPM 由JBoss 公司开发,目前最高版本 7.61.0.Final,不过从BPM5开始已经限之前不是同一个产品了,BPM5 的代码基础不是jBPM4,而是从 Drools Flow 重新开始,基于 Drools Flow 技术在国内市场上用的很少,jBPM4 诞生的比较早,后来jBPM4创建者 Tom Baeyens 离开JBoss 后,加入 Alfresco 后很快推出了新的基于jBPM4 的开源工作流系统 Activiti,另外jBPM 以Hibernate 作为数据持久化 ORM,而 Hibernate 也已不是主流技术mikechen的互联网架松首页架构视频技术文章面试题库问答社区。

    1. JFlow

Jflow是一个国产的开源工作流引擎,与业务场景结合紧密,再带表单引擎,数据表较多,中文概念较多,可配置型性强,支持作为中间件模式的集成。配置点集中在,节点属性,流程属性,方向条件。概念名词比较清晰,文档全面。有qq群技术支持。

流程设计器界面干净,从节点类型分类,分流,合流,分合流,子线程等等。表单与流程完美结合,与其它几款流程引擎设计理念不同。Jflow更适用,贴近用户操作。

表单引擎中的精华是审核组件,满足国内审批要求的需求,退回,分合流审核,会签,并行处理,队列处理,概念清晰,容易理解。

    1. osworkflow

是一个轻量化的流程引擎,基于状态机机制,数据库表很少,osworkflow 提供的工作流构成元素有: 步骤

(step) 、条件(conditions) 、循环(loops) 、分支(spilts) 、合并 joins)等,但不支持会签、跳转、退回、加签等这些

操作,需要自己扩展开发,有一定难度。如果流程比较简单,osworkflow 是很好的选择

 


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

相关文章

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;觉得写的范围太大了…

python正则表达式从字符串中提取数字

文章目录 python从字符串中提取数字使用正则表达式&#xff0c;用法如下&#xff1a;解题思路&#xff1a;代码如下&#xff1a; 匹配指定字符串开头的数字匹配包含指定字符串开头的数字匹配时间&#xff0c;17:35:24匹配时间&#xff0c;20181011 15:28:39 python从字符串中提…

Java正则表达式校验数字、字母及特殊字符

一、校验数字的表达式 1.数字&#xff1a;^[0-9]*$ 2.n位的数字&#xff1a;^\d{n}$ 3.至少n位的数字&#xff1a;^\d{n,}$ 4.m-n位的数字&#xff1a;^\d{m,n}$ 5.零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$ 6.非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-9…