您的位置:

Flowable工作流详解

Flowable工作流是一款基于Java的轻量级开源工作流引擎,它支持BPMN2.0规范、CMMN规范,同时也提供REST API以及JavaAPI,支持Spring,Spring Boot等框架。借助Flowable工作流,企业可以快速构建出符合自己实际业务的工作流。

一、工作流概念

工作流(Workflow),是指对于一项业务,按照规定的流程,逐级传递、申请、执行等,并且受到了严格控制的一种业务过程。

而BPM(Business Process Management)是指对于某项业务的整个生命周期进行全面管理的一种模式,最核心的内容包括了工作流、决策、交互等。在这些管理过程中,人员、系统等资源都是可以被自动调度的,以致达到更高效、完善的管理目的。

二、为什么选择Flowable工作流

1、轻量级:Flowable工作流是一款轻量级的工作流引擎,启动快、体积小,且可以嵌入Java应用中使用。

2、开放源代码:Flowable工作流是一个开源的工作流引擎,保证企业在使用过程中不会受到第三方的监控与限制。

3、商用友好:Flowable工作流允许企业在商业环境下进行使用,并且提供Flowable Task一类的额外服务。

三、Flowable工作流入门

1、下载安装:Flowable工作流可以在Flowable官网下载。下载完成后,可以解压缩后即可使用。

2、工作流模型:使用Flowable工作流进行流程管理,需要先定义出流程模型。这部分可以通过BPMN2.0规范进行定义。比如一个简单的流程模型可以是这样的:



  
   
    
    
    
    
    
    
    
    
    
    
  
   

  

3、引入依赖:在Java代码中使用Flowable工作流,需要引入相关的依赖。具体可以参见pom.xml如下:

<dependencies>
  <dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>6.6.0</version>
  </dependency>
</dependencies>

4、启动流程实例:在Java代码中启动流程实例,可以使用如下代码:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");

四、Flowable工作流高级应用

1、自定义任务表:默认情况下,Flowable工作流使用Act_RU_TASK表进行任务存储。如果需要使用自定义任务表,则可以像下面的代码一样配置流程引擎:

ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
    .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP)
    .setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1")
    .setJdbcUsername("sa")
    .setJdbcPassword("")
    .setJdbcDriver("org.h2.Driver")
    .setCustomMybatisMappers(Collections.singletonList(UserTaskMapper.class))
    .setCustomMybatisXMLMappers(Collections.singletonList("mappings/userTaskMapper.xml"));

ProcessEngine processEngine = cfg.buildProcessEngine();

2、定时任务:在Flowable工作流中,定时任务可以通过继承JobHandler接口来实现,具体可以参考下面的代码实现:

public class MyJob implements JobHandler {
    @Override
    public void execute(JobEntity jobEntity, String s, CommandContext commandContext) {
        // do sth
    }
}

3、多租户:Flowable工作流引擎可以支持多租户环境,即根据不同租户来区分流程管理等。具体操作可以参考官方文档实现。

五、总结

本文主要介绍了Flowable工作流的基本概念、选择优势、入门介绍以及高级应用。Flowable工作流作为一款轻量级的工作流引擎,可以帮助企业高效构建出符合自己实际业务的工作流,值得我们深入学习与应用。