当前位置: 首页 > article >正文

工作流之Flowable

一、定义

工作流(Workflow)是一种自动化处理业务过程的方法,用于定义、执行和管理业务任务的顺序。它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。Flowable是一个基于Java的开源BPM(业务流程管理)框架,它主要基于Activiti中的一些组件,并在此基础上进行了扩展和升级。

二、功能

Flowable的功能非常强大,涵盖了业务流程管理的多个方面。以下是其主要功能的详细介绍:

1. 流程定义

  • Flowable支持BPMN 2.0标准,使得流程定义更加规范和易于维护。
  • 通过Flowable的工作流设计器,用户可以直观地定义工作流程、任务、网关、决策等元素。

2. 流程引擎配置

  • Flowable提供了灵活的流程引擎配置选项,允许用户根据需要调整工作流的执行方式。
  • 用户可以选择合适的流程引擎,如Activiti、Camunda等,并进行相应的配置和集成。

3. 流程执行

  • Flowable的执行器能够确保流程的正确执行,并根据流程定义自动完成任务和判断。
  • 流程实例启动后,会按照预定义的流程进行执行,包括任务完成、网关判断、决策结果等。

4. 流程监控

  • Flowable提供了丰富的监控工具,允许用户实时监控和管理流程。
  • 用户可以查看流程状态、任务完成情况、性能指标等,以便及时发现和解决流程中存在的问题。

5. 任务管理

  • Flowable的任务服务提供了任务分配、委派、转派、认领以及完成等功能。
  • 通过任务服务,用户可以方便地管理任务的生命周期,确保任务的正确执行。

6. 历史数据管理

  • Flowable支持历史数据的记录和查询,包括流程实例、任务、变量、活动和步骤等。
  • 通过历史数据管理,用户可以分析流程的执行情况,优化流程设计。

7. 用户和组管理

  • Flowable提供了用户和组的管理功能,允许用户创建、更新、删除和查询用户和组的信息。
  • 这有助于实现基于角色的访问控制,确保流程的安全性。

8. RESTful API

  • Flowable通过RESTful API提供服务,方便与其他系统集成。
  • 用户可以通过编写调用API的客户端程序来使用Flowable引擎服务。

三、特点

Flowable作为一个轻量级的业务流程引擎,具有以下显著特点:

1. 可扩展性

  • Flowable提供了一组可扩展的API,使得开发人员可以根据需要自定义工作流。
  • 它支持与多种应用程序集成,如Spring和Hibernate等,以实现更高级的工作流管理。

2. 易用性

  • Flowable提供了易于使用的API和工具,使得开发人员可以快速构建工作流应用程序。
  • 它还提供了直观的Web-based模型设计器,使得非技术人员也可以方便地创建和修改流程定义。

3. 可视化

  • Flowable支持基于Web的图形化编辑器,用户可以直观地设计、部署和监控工作流。
  • 它还提供了动态表单设计功能,允许用户根据业务需求定制表单字段和布局。

4. 平台独立性

  • Flowable在设计时避免了与底层系统相关的代码,从而实现平台独立性。
  • 它可以部署在不同的云提供商的环境中,并支持基于容器的部署。

5. 高性能

  • Flowable具有高性能工作流建模和执行能力,可以在大量用户和大量数据的情况下快速运行。
  • 它通过优化引擎性能和可靠性,确保工作流应用程序的高效和稳定。

6. 灵活性

  • Flowable支持多种流程,并允许用户创建自定义操作,以适应各种业务需求。
  • 它还提供了丰富的扩展性和个性化定制能力,可以满足各种复杂场景的需求。

四、应用场景

Flowable工作流引擎适用于多种应用场景,包括但不限于:

1. 企业内部流程管理

  • 如请假审批、报销流程、合同审批等。
  • 通过Flowable,企业可以自动化处理这些内部流程,提高工作效率和准确性。

2. 业务流程自动化

  • 如订单处理、物流跟踪、客户服务等。
  • Flowable可以自动化处理这些业务流程,减少人工干预和错误率。

3. 复杂业务逻辑处理

  • 如金融交易、保险理赔、供应链管理等。
  • 通过Flowable,企业可以处理这些复杂的业务逻辑,优化流程设计和执行方式。

4. 微服务架构集成

  • Flowable可以与微服务架构无缝集成,实现业务流程的自动化和监控。
  • 这有助于企业构建更加灵活和可扩展的系统架构。

五、优势

Flowable工作流引擎相比其他同类产品具有以下显著优势:

1. 全面的功能支持

  • Flowable支持BPMN 2.0、CMMN和DMN标准,提供了全面的功能支持。
  • 它涵盖了流程定义、流程执行、流程监控、任务管理、历史数据管理等多个方面,满足企业复杂的业务流程管理需求。

2. 优秀的性能表现

  • Flowable具有高性能工作流建模和执行能力,可以在大量用户和大量数据的情况下快速运行。
  • 它通过优化引擎性能和可靠性,确保工作流应用程序的高效和稳定。

3. 灵活的扩展性

  • Flowable提供了一组可扩展的API,使得开发人员可以根据需要自定义工作流。
  • 它支持与多种应用程序集成,如Spring和Hibernate等,以实现更高级的工作流管理。

4. 直观的可视化工具

  • Flowable提供了直观的Web-based模型设计器和表单设计器,使得非技术人员也可以方便地创建和修改流程定义。
  • 这大大降低了使用门槛,提高了工作效率。

5. 强大的社区支持

  • Flowable是一个开源项目,拥有活跃的社区支持和丰富的文档资源。
  • 用户可以通过社区获取帮助和支持,共同解决问题和改进产品。

六、架构与组件

Flowable的架构主要分为四部分:工作流引擎、应用程序接口(API)、模型器和任务表单设计器。

1. 工作流引擎

  • Flowable的核心组件,包括运行时引擎和执行引擎。
  • 它管理整个流程的生命周期,监控、控制任务的执行以及记录流程实例的状态等信息。

2. 应用程序接口(API)

  • 根据RESTful风格,提供给外部系统访问Flowable引擎的接口。
  • 用户可以通过编写调用API的客户端程序来使用Flowable引擎服务。

3. 模型器

  • 用于创建和修改流程定义文件,支持基于Web的图形化编辑器。
  • 用户可以通过模型器直观地定义工作流程、任务、网关、决策等元素。

4. 任务表单设计器

  • 用于创建和修改任务表单,支持基于Web的表单设计器。
  • 用户可以通过表单设计器定制表单字段和布局,以满足业务需求。

七、数据库表结构

Flowable的所有数据库表都以ACT_开头,第二部分是说明表用途的两字符标示符。以下是主要表结构的解释:

1. ACT_RE_

  • 'RE’代表repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。
  • 主要表包括ACT_RE_DEPLOYMENT(部署对象)、ACT_RE_MODEL(基于流程的模型信息)、ACT_RE_PROCDEF(流程定义)等。

2. ACT_RU_

  • 'RU’代表runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。
  • 主要表包括ACT_RU_ACTINST(运行中实例的活动表)、ACT_RU_EXECUTION(运行的实例表)、ACT_RU_TASK(运行中的正常节点任务)等。

3. ACT_HI_

  • 'HI’代表history。这些表存储历史数据,例如已完成的流程实例、变量、任务等。
  • 主要表包括ACT_HI_ACTINST(历史活动实例)、ACT_HI_PROCINST(历史流程实例)、ACT_HI_TASKINST(历史任务实例)等。

4. ACT_GE_

  • 通用数据表,在多处使用。
  • 主要表包括ACT_GE_BYTEARRAY(保存流程的bpmn的xml以及流程的Image缩略图等信息)、ACT_GE_PROPERTY(Flowable相关的基本信息)等。

5. ACT_ID_*:

  • 表示组织信息,如用户、用户组等。

八、实战应用

以下是使用Flowable进行业务流程管理的一个简单实战应用示例:

1. 添加依赖

在Spring Boot项目中添加Flowable的依赖,以便使用其提供的服务。

<dependencies>
    <!-- Spring Boot 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- Flowable 依赖 -->
    <dependency>
        <groupId>org.flowable</groupId>
        <artifactId>flowable-spring-boot-starter</artifactId>
        <version>6.7.1</version> <!-- 确保使用最新版本 -->
    </dependency>
    <!-- 数据库驱动依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.18</version> <!-- 确保使用与数据库兼容的版本 -->
    </dependency>
</dependencies>

2. 配置数据库

application.ymlapplication.properties中配置数据库连接信息。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flowable?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT&nullCatalogMeansCurrent=true
    username: root
    password: root

flowable:
  database-schema-update: true # 每次启动时自动创建或更新数据库表

3. 创建流程定义文件

使用Flowable Modeler或其他BPMN工具创建流程定义文件(.bpmn20.xml)。例如,一个简单的请假流程定义文件可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
             xmlns:flowable="http://flowable.org/bpmn"
             targetNamespace="LeaveProcess">

    <process id="leaveProcess" name="Leave Process" isExecutable="true">
        <startEvent id="startEvent" name="Start" />

        <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="userTask1" />

        <userTask id="userTask1" name="Submit Leave Request" flowable:assignee="employee" />

        <sequenceFlow id="flow2" sourceRef="userTask1" targetRef="userTask2" />

        <userTask id="userTask2" name="Approve Leave Request" flowable:assignee="manager" />

        <sequenceFlow id="flow3" sourceRef="userTask2" targetRef="endEvent" />

        <endEvent id="endEvent" name="End" />
    </process>
</definitions>

4. 部署流程定义

在Spring Boot项目中编写代码来部署流程定义文件。

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.repository.Deployment;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class FlowableApplication {

    public static void main(String[] args) {
        SpringApplication.run(FlowableApplication.class, args);
    }

    @Bean
    public ProcessEngine processEngine() {
        return ProcessEngineConfiguration
                .createStandaloneInMemProcessEngineConfiguration()
                .buildProcessEngine();
    }

    @Bean
    public CommandLineRunner run(ProcessEngine processEngine) {
        return args -> {
            Deployment deployment = processEngine.getRepositoryService()
                    .createDeployment()
                    .addClasspathResource("path/to/your/leaveProcess.bpmn20.xml")
                    .deploy();

            System.out.println("Deployment ID: " + deployment.getId());
        };
    }
}

5. 启动流程实例

编写代码来启动流程实例并完成任务。

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class FlowableRunner implements CommandLineRunner {

    @Autowired
    private ProcessEngine processEngine;

    @Override
    public void run(String... args) throws Exception {
        // 启动流程实例
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");

        System.out.println("Process Instance ID: " + processInstance.getId());

        // 完成任务
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();

        while (task != null) {
            System.out.println("Task ID: " + task.getId());
            System.out.println("Task Name: " + task.getName());
            System.out.println("Task Assignee: " + task.getAssignee());

            // 假设当前用户是任务分配者,完成任务
            taskService.complete(task.getId());

            // 查询下一个任务
            task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        }

        System.out.println("Process Instance Ended");
    }
}

6. 监控和管理流程

通过Flowable提供的API或Flowable UI来监控和管理流程实例、任务、变量等。

  • Flowable API提供了丰富的服务,如RuntimeServiceTaskServiceHistoryService等,用于查询和管理流程实例、任务、历史数据等。
  • Flowable UI提供了一套基于Web的用户界面,用于直观地监控和管理流程实例、任务、变量等。

7. 自定义和扩展

根据业务需求,可以自定义和扩展Flowable的功能。

  • 通过实现Flowable提供的接口或继承其类,可以自定义任务监听器、执行监听器、表单字段类型等。
  • 通过编写自定义的Java Delegate或Spring Bean,可以将业务逻辑集成到流程中。
  • 通过集成外部系统(如邮件服务、消息队列等),可以实现流程与其他系统的交互。

通过以上步骤,您可以在Spring Boot项目中使用Flowable来构建和管理业务流程。Flowable的灵活性和强大的功能将帮助您实现业务流程的自动化和高效管理。

九、总结

Flowable是一个基于Java的开源BPM框架,它在Activiti的基础上进行了扩展和升级。Flowable提供了全面的功能支持,包括流程定义、执行、监控、任务管理、历史数据管理和用户组管理等。其特点在于可扩展性、易用性、可视化、平台独立性、高性能和灵活性。通过Flowable,企业可以自动化处理内部流程、业务流程以及复杂业务逻辑,提高工作效率和准确性。
在实战应用中,Flowable可以与Spring Boot等框架无缝集成,通过添加依赖、配置数据库、创建流程定义文件、部署流程定义、启动流程实例等步骤,快速构建工作流应用程序。同时,Flowable提供了丰富的API和Web-based模型设计器,使得开发人员和非技术人员都可以方便地创建和修改流程定义。
此外,Flowable还支持多种流程,并允许用户创建自定义操作,以适应各种业务需求。其强大的社区支持和丰富的文档资源也为用户提供了极大的便利。
总之,Flowable是一个功能强大、易于使用、灵活可扩展的业务流程管理框架,适用于多种应用场景,可以帮助企业实现业务流程的自动化和高效管理。


http://www.kler.cn/a/381638.html

相关文章:

  • 使用docker安装zlmediakit服务(zlm)
  • MYSQL安装(ubuntu系统)
  • PowerCat反弹Shell
  • 使用命令行管理 Windows 环境变量
  • Django中分组查询(annotate 和 aggregate 使用)
  • 【WPF】MatrixTransform类
  • 掌握ElasticSearch(八):聚集、文档间的关系
  • 解决阿里云三个月证书过期 免费SSL证书部署教程
  • Pytest参数详解 — 基于命令行模式!
  • 高级 <HarmonyOS主题课>让您的应用拥有领先的位置服务能力的课后习题
  • 测试自动化如何和业务流程结合?
  • 初识HTML
  • sql在hive和阿里云maxComputer的区别
  • 【俄罗斯市场必看】如何在VK上做营销
  • BERT框架
  • spring、mybatis、并发、虚拟机总结
  • 第三百一十一节 Java JSON教程 - JSON模式、JSON Java
  • FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持
  • 《安全基石:等保测评的全方位解读》
  • Zabbix proxy 主动模式的实现
  • 三周精通FastAPI:32 探索如何使用pytest进行高效、全面的项目测试!
  • 微前端应用+MicApp、无界、乾坤、EMP+简要了解+部分场景应用
  • Qt——常用控件
  • 每天五分钟计算机视觉:什么是神经网络风格转换?
  • 「树链剖分」学习笔记
  • 【深度学习】batchsize太大或太小的优缺点,如何平衡batchsize大小