入行几年的程序员们, 多少都对工作流有所了解。Java语言支持的工作流有很多选择, 最早的JBPM, 到现在比较出名的Activiti, Camunda, Flowable等等, 都是比较常见的开源产品。
各家公司除了自己造轮子之外, 选择开源产品进行个性化开发, 是大部分中小团队最好的选择, 今天介绍一下Flowable, 解决如何下手的问题。
Flowable使用 Apache V2 license 协议开源, 支持 BPMN 2.0 行业标准。
让我们一起花三十分钟, 了解Flowable的安装, 建表, 设计器, API等常见问题。
本文基于Spring Boot集成方式进行介绍
官方网址:https://www.flowable.com/
Github:https://github.com/flowable/
开源协议Apache-2.0
基础软件及版本:
创建Spring Boot 项目, pom加入依赖
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.7.0</version>
</dependency>
由于需要支持TIMESTAMP (6) 类型, 因此5.6.4及以下版本无法使用
5.7或8.0安装成功
两种初始化建表方式:sql脚本,或是boot自动。
sql方式请参考1.1.2
按以下方法启动Spring Boot项目,可自动建表
建表时, 连接串需要&nullCatalogMeansCurrent=true
spring:
datasource:
url: jdbc:mysql://192.168.1.123:3306/flowable?useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
username: root
password: pass
driverClassName: com.mysql.cj.jdbc.Driver
建表后可关闭, 下次启动不会再次建表
flowable:
database-schema-update: false
默认会启动liquibase, 可关闭
spring:
liquibase:
enabled: false
据多个朋友反馈,Oracle建库可能出现建表语句不全的问题,推荐大家从github下载发布包,执行内部的建表语句,包括mysql也可以采用这种方式。
下载地址:https://github.com/flowable/flowable-engine/releases/tag/flowable-6.7.0
下载后,执行里面的database脚本即可。
初次使用,可以选择create - all的脚本执行。
常用的db2、mssql、mysql、oracle、postgresql都有,还有一个奇怪的h2混了进来
h2是演示版系统默认的库,但我没实际用过。
默认情况下不支持国产脚本,经测试达梦可以成功使用,需要人工按照Oracle的库表调整。
各大开源流程工具都遵从BPM标准, 一般流程设计都是以BPM格式的XML文件进行定义。但我们不可能去手写配置文件, 一般都借助于可视化设计器。
官方给的Web设计器大致分两个版本, 需要自行部署到Tomcat运行, 并且需要连接到前面建的数据库。
6.5版本的方法仅供参考, 本文使用2.2的设计器
官网下载设计器, 然后部署到tomcat, 包括
启动tomcat, 流程设计器访问 http://localhost:8080/flowable-modeler
默认login/password: admin/test
自带H2数据库, 可修改flowable-default.properties更改数据源, 文件在各个模块的/WEB-INF/classes/下面
推荐使用
官网下载, 只有2个包
访问地址:
http://localhost:8080/flowable-rest/docs/ (login/password: rest-admin/test)
http://localhost:8080/flowable-ui (login/password: admin/test)
修改数据源:
打开/WEB-INF/classes/flowable-default.properties, 搜索spring.datasource相关配置, 改为步骤1中的数据库地址即可。
Eclipse设计器属于离线设计器, 无需连库, 成果以xml文件方式保存, 可以通过发布程序发送至流程引擎。
安装步骤:
流程的起点, 必须且仅有1个。
可配置开始表单, 启动时要求发起人立即填写一些内容。
也可以留空, 仅作为默认起点。
流程的重点, 必须有1个或多个, 可以有正常结束/异常结束等等
需要用户参与的任务节点, 最常见的节点。
存在四种情况:
不等待节点。执行实例走到服务任务节点之后会继续往下流转。
不等待节点。脚本类型有javascript、groovy、juel
根据变量值的条件判断, 决定后续路径
用条件表达式也能实现同等功能
按XML中定义的顺序, 执行第一个满足条件的路径。如果都不符合则会报错
具有分支和汇聚节点, 不解析条件, 多个路径同时并行
在Flowable中, 如果流程是多路并行的, 可以在任务上设置为并行任务, 以替代传统工作流的多个相同任务的并行行为。
解析条件, 并执行所有符合条件的路径
自动生成的表中, 有很多是支持流程设计器的表, 真正流程运行所需的表并没有那么多。
如果用过Activity的同学, 就会发现表名很多相同的, 但Flowable的表多了很多, 毕竟两者早期是同一个产品。
表的功能一般可以通过第二个词语缩写来进行区分。
’RE’表示repository(存储)。RepositoryService接口操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
’RU’表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
’ID’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。
一般在正式系统中, 会将这些表用业务系统的组织机构, 角色表进行替换。
’HI’表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。
普通数据,各种情况都使用的数据。
内置自定义表单功能, 可以实现一些简单的表单定义, 但真正业务开展时, 很难对复杂多变的情况进行支撑, 不建议使用。
大家如果要在开发的系统中, 对Flowable进行改造开发, 表单设计将是其中最复杂的部分。以后有时间单独写一篇文章进行介绍
流程定义文件是xml格式, 交由流程引擎的ProcessDefinition服务进行发布。
ProcessDefinition每次发布时, 会根据key进行版本控制, 按数值顺序1,2,3递增
启动流程时, 根据key启动, 则会自动选择版本最高的, 产生流程实例
引擎API是与Flowable交互的最常用手段。总入口点是ProcessEngine。
在Spring Boot项目中, 这些对象都会被Spring容器管理, 可以直接引用
public class MyTestController {
@Autowired
private ProcessEngine processEngine;
@Autowired
private RepositoryService repositoryService;
}
流程引擎的引用, 单例唯一, 可以通过它获得所有api的服务对象
管理与控制部署(deployments)与流程定义(process definitions)的操作
人类用户参与操作的任务, 即我们开发的软件中"我的待办任务"等内容.
以上就是对Flowable工作流的简单介绍, 所有教程将整理在公主号thisjava中,希望大家能顺利使用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。