1.Java开源工作流框架对比
2.Flowable 介绍
3.Flowable工作流入门看这篇就够了
4.Spring Boot + Flowable 快速实现工作流,So Easy!
5.SpringBoot+flowable集成开发设计
6.全网最火的工作流框架Flowable完整教程--基本操作
Java开源工作流框架对比
工作流是业务流程在计算机环境下的自动化描述,它是CSCW(计算机支持的协同工作)的一部分。在实现流程逻辑时,我们通常使用字段记录状态。屏推源码然而,面对复杂的状态和条件,单纯用字段记录状态的方式可能不再理想。工作流框架能解除业务宏观流程和微观逻辑的耦合,让业务人员制定流转逻辑,专业人员关注流程节点。主流的开源Java工作流框架有Activiti、Camunda和Flowable,它们均源自于jbpm。
Activiti是针对业务人员、开发人员和系统管理员的轻量级工作流和业务流程管理平台。它具有快速、稳定的核心流程引擎,易于集成的特性。Activiti Cloud是新一代的业务自动化平台,专为分布式基础架构设计。设计师包括Modeler设计器和在线设计器bpmn.io,支持BPMN 2.0流程定义。主要服务类包括调用方式、设计器等。
Flowable是一个轻量级业务流程引擎,用于部署BPMN 2.0流程定义、创建流程实例、查询运行和历史流程实例。Flowable的核心思想是提供多功能扩展,使用户能够根据需求自定义。它在功能上比Activiti更加完善,是开发国内特色工作流系统时的更佳选择。
Camunda是一个基于Java的框架,支持工作流、案例管理和业务决策管理。工作原理包括设计器和兼容性。世纪之战mytv源码Camunda在并发场景下的性能通常优于Flowable,稳定性也较好。
在社区活跃度方面,从GitHub活跃度来看,Activiti和Flowable较为相似,而Camunda则相对不活跃。在微服务、云计算等环境下,Camunda的前景优势逐渐显现,成为新一代工作流引擎。
无论是Activiti、Flowable还是Camunda,都是传统工作流引擎,为开发者提供学习和研究价值。建议开发者深入了解这些框架的设计思想和理念,以便在实际项目中选择最适合的工具。
Flowable 介绍
Flowable 是一个基于 Java 的轻量级业务流程引擎,它支持BPMN 2.0流程定义的部署与执行,包括流程实例的管理和查询。核心引擎提供API以管理流程并执行相关操作,同时支持CMMN用于案例管理,DMN进行决策规则处理。它的灵活性使其能轻易融入各种Java环境,如Java SE、Servlet容器或Java EE服务器,还可通过REST API进行调用。Flowable框架也包含一系列UI应用,如Modeler用于流程设计,Admin进行引擎管理,IDM负责人员和组织,以及Task处理任务执行。
Flowable源自Activiti5.x的重构,引入了CMMN、DMN和表单等功能。其特点是高效且实战验证,提供了流程设计插件,以及以Angular构建的华为方舟源码guanw可扩展用户界面。关于软件包,它包含了database脚本、文档、jar包、war文件等,如Admin、IDM、Modeler、REST和Task应用,分别用于引擎管理、人员管理、流程设计、API暴露和任务处理。源码包则包含了各种模块结构,如SpringBoot启动类、配置文件、服务层、控制层等,以及用于编译和快速入门的脚本和教程,如运行IDM来创建用户权限,使用Modeler创建流程模板,通过Task应用查询并完成任务。
Flowable工作流入门看这篇就够了
大家好,我是沙师弟,一名热爱探索和分享的程序员。
多年的程序员生涯让我对工作流有了深入了解。Java语言支持的工作流选择众多,从早期的JBPM到现在的Activiti、Camunda、Flowable等,都是常见的开源产品。
许多公司会选择开源产品进行个性化开发,以节省成本。今天我将为大家介绍Flowable,解决如何入手的问题。
Flowable基于Apache V2 license协议开源,支持BPMN 2.0行业标准。freebsd安装内核源码让我们用三十分钟的时间,了解Flowable的安装、建表、设计器、API等常见问题。
0. 安装须知:本文基于Spring Boot集成方式进行介绍
官方网址:flowable.com/
Github:github.com/flowable/
开源协议Apache-2.0
基础软件及版本:1. Maven
创建Spring Boot项目,pom中加入依赖
1.1 建表
1.1.1 MySQL:由于需要支持TIMESTAMP (6) 类型,5.6.4及以下版本无法使用,5.7或8.0安装成功。两种初始化建表方式:sql脚本,或是boot自动。
按以下方法启动Spring Boot项目,可自动建表:建表时,连接串需要&nullCatalogMeansCurrent=true。建表后可关闭,下次启动不会再次建表。默认会启动liquibase,可关闭。
1.1.2 Oracle等其他数据库:据多个朋友反馈,Oracle建库可能出现建表语句不全的问题,推荐大家从github下载发布包,执行内部的建表语句,包括mysql也可以采用这种方式。
下载地址:github.com/flowable/flo...
下载后,执行里面的database脚本即可。初次使用,可以选择create - all的脚本执行。常用的db2、mssql、mysql、oracle、postgresql都有,还有一个奇怪的h2混了进来。
h2是演示版系统默认的库,但我没实际用过。
1.1.3 国产数据库:默认情况下不支持国产脚本,经测试达梦可以成功使用,星球商城源码下载需要人工按照Oracle的库表调整。
2. 设计器:各大开源流程工具都遵从BPM标准,一般流程设计都是以BPM格式的XML文件进行定义。但我们不可能去手写配置文件,一般都借助于可视化设计器。
官方给的Web设计器大致分两个版本,需要自行部署到Tomcat运行,并且需要连接到前面建的数据库。
2.1 Flowable 6.5版本以前的:6.5版本的方法仅供参考,本文使用2.2的设计器。
2.2 Flowable 6.6版本以后的:推荐使用。官网下载,只有2个包。
访问地址:/flowable/flowable-engine/releases/download/flowable-6.6.0/flowable-6.6.0.zip
下载完成后,将压缩包中的flowable-6.6.0\wars\flowable-ui.war文件放置于Tomcat服务器中。然后,通过访问http://localhost:/flowable-ui并使用账户admin/test登录,即可开始工作流程的创建与管理。 登录后,在APP.MODELER中创建流程图,流程图的创建过程涵盖了开始节点、学生节点、老师节点、网关以及结束节点等元素。此过程实现了业务逻辑的自动化流转。二、绘制流程图
在Flowable-UI的APP.MODELER界面中,根据业务需求绘制流程图。此示例展示了流程的基本构成元素及运行逻辑。 流程运行逻辑如下:流程启动后,自动流向“学生”节点等待执行。执行后,流程流转至“老师”节点,随后执行至“网关”,网关根据条件判断流向下一个节点(如“校长”节点)。在“校长”节点完成任务后,流程结束。 绘制流程图时,需注意以下细节:1. 保留流程模型。
2. 顺序流可以设置条件限制流程走向。
3. 任务需分配给执行用户,可选择分配至候选组或直接指派给特定用户。
三、后台项目搭建
使用JDK8及Spring Boot框架搭建后台项目。项目依赖通过POM.xml文件管理,确保所有组件正确集成。四、数据库设计
Flowable数据库设计遵循ACT_前缀命名规则,包含以下主要表类型:- ACT_RE_:存储静态信息,如流程定义与资源。
- ACT_RU_:存储运行时信息,如流程实例与用户任务。
- ACT_HI_:存储历史数据,包括已完成流程实例与任务信息。
- ACT_GE_:通用数据表,用于多处数据存储。
五、流程引擎API与服务
主要API入口为ProcessEngine,提供与Flowable交互的接口。关键服务包括:- RepositoryService:管理流程定义与部署。
- RuntimeService:启动流程实例。
- IdentityService:管理用户与组信息。
- HistoryService:提供历史数据查询功能。
- ManagementService:用于数据库信息查询与管理。
- DynamicBpmnService:用于动态修改流程定义内容。
通过以上步骤,你已具备快速实现工作流的基础。请确保在实际项目中进行相应的调整与优化,以适应特定业务需求。SpringBoot+flowable集成开发设计
本文详细阐述了SpringBoot与flowable的集成开发与设计过程。首先,通过flowable自带的flowable-ui工具绘制流程图。然后,使用SpringBoot框架开发流程业务功能接口。接着,将绘制的流程图通过flowable-ui部署运行,利用flowable-6.6.0版本的官方demo进行实践。
具体步骤如下:从官网下载flowable-6.6.0版本,将其flowable-ui.war文件部署到Tomcat服务器中,通过浏览器访问地址http://localhost:/flowable-ui进行登录。使用flowable-ui的APP.MODELER功能创建流程图,并导出流程至项目中使用或配置数据库连接。绘制流程图时需注意元素类型如开始、结束、箭头线段、菱形(中间有X)以及矩形等。
流程图的细节包括保留流程模型、设置流条件、分配执行用户等。通过将流程导出文件导入至SpringBoot项目中,使用flowable-spring-boot-starter依赖进行集成。项目配置包括数据库连接信息、Spring版本等。数据库表以ACT_开头,分为静态信息、运行时信息和历史信息三类。
在SpringBoot项目中集成flowable,需添加flowable-spring-boot-starter依赖和mysql-connector-java驱动。配置应用时,需设置数据库连接信息、数据源url、字符编码、驱动类名、用户名和密码。流程引擎API提供与flowable交互的入口点,包括RepositoryService、RuntimeService、IdentityService、FormService、HistoryService和ManagementService等。
通过流程引擎API,可以管理流程部署、启动流程实例、管理用户、查询历史数据、执行查询与管理作业等操作。动态BpmnService允许在不重新部署的情况下修改流程定义的部分内容。
全网最火的工作流框架Flowable完整教程--基本操作
创建一个基本的maven工程,可以是Eclipse也可以是其他IDEA。然后添加两个依赖
在pom.xml文件中添加下列行:
然后创建一个普通的Java类,添加对应的main方法,首先要做的是初始化「ProcessEngine」流程引擎实例。这是一个线程安全的对象,因此通常只需要在一个应用中初始化一次。 ProcessEngine由「ProcessEngineConfiguration」实例创建。该实例可以配置与调整流程引擎的设置。 通常使用一个配置XML文件创建ProcessEngineConfiguration,但是(像在这里做的一样)也可以编程方式创建它。 ProcessEngineConfiguration所需的最小配置,是数据库JDBC连接:
注意在mysql8.0中执行可能出现如下的错误
出现这种情况只需要在mysql的连接字符串中添加上nullCatalogMeansCurrent=true,设置为只查当前连接的schema库即可。
然后应用运行没有问题,但也没有在控制台提供有用的信息,只有一条消息提示日志没有正确配置。Flowable使用 SLF4J作为内部日志框架。在这个例子中,我们使用log4j作为SLF4J的实现。因此在pom.xml文件中添加下列依赖:
Log4j需要一个配置文件。在src/main/resources文件夹下添加log4j.properties文件,并写入下列内容:
重新运行应用。应该可以看到关于引擎启动与创建数据库表结构的提示日志:
同时可以看到创建了相关的表结构在数据库中
这样就得到了一个启动可用的流程引擎。接下来为它提供一个流程!
接下来我们构建一个非常简单的请假流程,Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。 在Flowable术语中,我们将其称为一个**流程定义(process definition)「。一个流程定义可以启动多个」流程实例(process instance)**。流程定义可以看做是重复执行流程的蓝图。 在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。
BPMN 2.0存储为XML,并包含可视化的部分:使用标准方式定义了每个步骤类型(人工任务,自动服务调用,等等)如何呈现,以及如何互相连接。这样BPMN 2.0标准使技术人员与业务人员能用双方都能理解的方式交流业务流程。
我们要使用的流程定义为:
流程定义说明:
一般来说,这样的流程定义使用可视化建模工具建立,如Flowable Designer(Eclipse)或Flowable Web Modeler(Web应用)。但在这里我们直接撰写XML,以熟悉BPMN 2.0及其概念。
与上面展示的流程图对应的BPMN 2.0 XML在下面显示。请注意这只包含了“流程部分”。如果使用图形化建模工具,实际的XML文件还将包含“可视化部分”,用于描述图形信息,如流程定义中各个元素的坐标(所有的图形化信息包含在XML的BPMNDiagram标签中,作为definitions标签的子元素)。
将下面的XML保存在src/main/resources文件夹下名为holiday-request.bpmn.xml的文件中。
现在我们已经有了流程BPMN 2.0 XML文件,下来需要将它*部署(deploy)***到引擎中。部署一个流程定义意味着:
将流程定义部署至Flowable引擎,需要使用RepositoryService,其可以从ProcessEngine对象获取。使用RepositoryService,可以通过XML文件的路径创建一个新的*部署(Deployment),并调用deploy()*方法实际执行:
然后执行该方法日志操作成功:
在后台表结构也可以看到相关的信息
act_re_deployment: 流程定义部署表,每部署一次就增加一条记录
act_re_procdef :流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
act_ge_bytearray :流程资源表,流程部署的 bpmn文件和png会保存在该表中
我们现在可以通过API查询验证流程定义已经部署在引擎中(并学习一些API)。通过RepositoryService创建的ProcessDefinitionQuery对象实现。
输出结果为:
现在已经在流程引擎中部署了流程定义,因此可以使用这个流程定义作为“模板”启动流程实例。
要启动流程实例,需要提供一些初始化流程变量。一般来说,可以通过呈现给用户的表单,或者在流程由其他系统自动触发时通过REST API,来获取这些变量。在这个例子里,我们简化直接在代码中定义了,我们使用RuntimeService启动一个流程实例。
启动成功,输出结果如下:
对应的流程实例ID为:
启动流程实例涉及到的表结构:
上面员工发起了一个请假流程,接下来就会流转到总经理这儿来处理,之前我们没有指定经理这的处理人,我们可以加一个
然后我们来查看下lisi的任务
输出结果为:
现在李四这个角色可以来完成当前的任务了
在此处我们直接解决掉这个请假,然后会走发送拒绝邮件的流程,这块我们需要用到JavaDelegate来触发。
我们定义这样一个Java类
然后来完成任务
然后可以看到JavaDelegate触发了
有些流程已经没有用了,我们需要删除掉,其实也非常简单
选择使用Flowable这样的流程引擎的原因之一,是它可以自动存储所有流程实例的「审计数据」或「历史数据」。这些数据可以用于创建报告,深入展现组织运行的情况,瓶颈在哪里,等等。
例如,如果希望显示流程实例已经执行的时间,就可以从ProcessEngine获取HistoryService,并创建*历史活动(historical activities)*的查询。在下面的代码片段中,可以看到我们添加了一些额外的过滤条件:
结果按照结束时间排序,代表其执行顺序。
输出结果
好了~flowable的基本应用我们就先介绍到这里了。