Flowable流程引擎入门
阅读数:395 评论数:0
跳转到新版页面分类
python/Java
正文
Flowable是一个采用Java开发的业务流程引擎,通过Flowable流程引擎,我们可以部署BPMN2.0的流程定义(一般为XML文件),通过流程定义创建流程实例,查询和访问流程相关的实例与数据,等等。
可以以jar形式加入应用或服务,来嵌入引擎。
Flowable项目中包括BPMN(Business Process Model and Notation,业务流程引擎)引擎,CMMN(Case Management Model and Notation,案例模型引擎)引擎、DMN(Decision Model and Notation,决策引擎)引擎、表单引擎(Form Engine),也有许多Flowable应用。
一、简介
1、协议
flowable在apache v2协议下发布。
2、必要的软件
jdk 8
3、内部实现类
在jar文件中,所有.impl.包下的类都是实现类,只应在内部使用,实现类中的所有类或接口都不保证稳定。
4、flowable与activiti
flowable是activiti的fork。
二、与Spring Boot集成
Spring Boot提供约定大于配置,只需要项目中添加flowable-spring-boot-starter或flowable-spring-boot-starter-rest配置。
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>${flowable.version}</version>
</dependency>
Flowable需要数据库来存储数据,只要添加一个数据库驱动并提供数据库URL,就可以更换数据源。例如mysql
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/flowable-spring-boot?characterEncoding=UTF-8
spring.datasource.username=flowable
spring.datasource.password=flowable
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
SpringBoot启动后,所有的Flowable服务都暴露为Spring Bean,包括ProcessEngine,CmmnEngine,DmnEngine,FormEngine,ContentEngine及IdmEngine。
1、自动部署
(1)processes目录
此目录下的任何BPMN2.0流程定义都会被自动部署。
(2)cases目录
此目录下的任何CMMN1.1事例都会被自动部署。
(3)forms目录
此目录下的任何Form定义都会被自动部署。
2、REST支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
3、配置
(1)flowable.check-process-definitions
是否需要自动部署流程定义。
(2)flowable.custom-mybatis-mappers
需要添加至引擎的自定义mybatis映射的FQN。
(3)flowable.database-schema
如果数据库返回的元数据不正确,可以在这里设置schema用于检测/生成表
(4)flowable.database-schema-update
数据库schema更新策略。
(5)flowable.db-history-used
是否要使用db历史
(6)flowable.deployment-name
自动部署的名称。
(7)flowable.history-level
要使用的历史级别。
(8)flowable.process-definition-location-prefix=classpath*:/processes/
自动部署时查找流程的目录。
(9)flowable.process-definition-cache-limit=-1
流程定义缓存中保存深沟高垒 程定义的最大数量。默认值为-1(缓存所有流程定义)。
(10)flowable.process.enable-safe-xml
在解析bpmn xml文件时进行额外检查。部分无法使用这个功能的平台需要禁用这个功能。
(11)flowable.process.servlet.load-on-startup=-1
启动时加载Process servlet.
(12)flowable.process.servlet.name
Process servlet的名字。
(13)flowable.process.servlet.path
process servlet的context path。
(14)flowable.process.async-executor-activate
是否启用异步执行器。
(15)flowable.process.async.executor.default-async-job-acquire-wait-time-in-millis
异步作业获取线程在进行下次获取查询前的等待时间(以毫秒计)。只在当次没有取到新的异步作业,或者只取到很少的异步作业时生效。默认值=10s。
(16)flowable.process.async.executor.default-queue-size-full-wait-time-in-millis
异步作业获取线程在队列满时,等待执行下次查询的等待时间(以毫秒计),默认值 为0.
(17)flowable.process.async.executor.default-timer-job-acquire-wait-time-in-millis
定时器作业获取线程在进行下次获取查询前的等待时间(以毫秒计)。只在当次没有取到新定时器作业,或者只取到很少的定时器作业时生效,默认10秒。
(18)flowable.process.async.executor.max-async-jobs-due-per-acquisition
单次查询的异步作业的数量,默认值为1,以降低乐观锁异常的可能性。
(19)flowable.process.async.executor.timer-lock-time-in-millis
定时器作业在被异常执行器取走后的锁定时间(以毫秒计)。在这段时间内,其它异步执行器不会尝试获取及锁定这个任务。
三、BPMN 2.0
BPMN是一种广泛接受与支持的,展现流程的注记方法。
四、BPMN 业务流程引擎
流程引擎是支持配置业务流转过程的关键模块。Flowable支持BPMN2.0行业标准。允许通过导入XML文件或通过前端可视化界面建立流程。
支持如下类型的流程元素:
1、事件event
事件通常用于为流程生命周期中发生的事件建模。在BPMN 2.0中,有两种主要的事件分类:
(1)捕获事件
捕获事件为当流程执行到达这个事件时,会等待直到触发器动作。
(2)抛出事件
当流程执行到达这个事件时,会触发一个触发器。
2、顺序流 sequence flow
是两个元素间的连接器,在流程执行过程中,一个元素被访问后,会沿着其所有出口顺序流继续执行,这意味着bpmn 2.0的默认是并行执行的。
3、网关gateway
用于控制执行的流向,网关可以消费与生成token。
(1)排他网关 exclusive gateway
使用排他网关时,只会选择一条顺序流,当多条顺序流的条件都为true时,会且仅会选择xml最先定义的顺序流继续流程。
(2)并行网关
并行网关不计算条件。
(3)包容网关
可看做排他网关与并行网关的组合,与排他网关一样,可以在包容网关的出口顺序流上定义条件,包容网关会计算条件。然后包容网关与并行网关一样,可以同时选择多于一条出口顺序流。
(4)基于事件的网关
网关的每一条出口顺序流都需要连接至一个捕获中间事件。
4、任务
flowable支持的任务类型超过15种。
(1)用户任务
用于对需要人工执行的任务进行建模。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表创建一个新任务。用户任务允许标识到期日期以及直接派给用户。
(2)邮件任务
(3)业务规则任务
用于同步地执行一条或多条规则。
4、子流程与调用活动
(1)sub-process
包含其他的活动、网关、事件等活动。其本身构成一个流程,并作为更大流程的一部分。
(2)call activity
有别于一般的子流程,调用活动引用一个流程定义外部的流程,而子流程嵌入在原有流程定义内。
五、决策引擎DMN
Flowable原本与规则引擎的关联并不强,但实际业务流程中,有时城要由多个决策来决定流程走向,而每个决策都要根据自身的规则来决定,每个决策之间也可能存在关联。此时就需要规则引擎来提供决策支持。在规则引擎开源产品中,Drools是最知名的,它实现了PMML(Predictive Model Markup Language)规范,也时支持DMN(Decision Model and Notation)标准。
六、案例模型引擎CMMN
与BPMN引擎相比,CMMN引擎适用于如下几种场景:
场景1
BPMN引擎在处理顺序执行、职责分工是确的工作流程时有优势,但面对动态、自由、并行的情况时,CMMN更适合。
场景2
处理带有生命周期特征的场景,以项目为例,项目的立项、中止、收尾、交付等阶段,可以在CMMN中通过Stages概念在更高层次进行描述。
七、表单引擎Form
Flowable框架中将表单作为一个独立的子模块,可以将表单作为一个服务在其他模块中进行调用,表单服务就可以控制所有流程所使用的表单以及表单字段的可读、可写等操作。表单相关的使用可分为表单的定义以及表单的运行实例两个阶段。表单定义支持导入以.form为后缀的表单定义文件(JSON语言编写)。