SpringBoot整合Flowable【02】- 整合初体验

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文介绍了如何基于Flowable 6.8.1版本搭建工作流项目。首先,根据JDK和Spring Boot版本选择合适的Flowable版本(7.0以下)。接着,通过创建Spring Boot项目并配置依赖,包括Flowable核心依赖、数据库连接等。然后,建立数据库并配置数据源,确保Flowable能自动生成所需的表结构。最后,启动项目测试,确认Flowable成功创建了79张表。文中还简要介绍了这些表的分类和常用表的作用,帮助初学者理解Flowable的工作原理。

一、版本选择

在我们正式建立项目前,我们先去flowable的github主页了解一下版本信息,flowable版本上大的区别主要以7.0.X版本作为界线,通过官方的版本说明我们知道7.0版本主要对JDK17和SpringBoot3做了支持,所以各位读者在选择版本的时候要根据自己项目目前Spring和JDK的版本进行选择,如果是非SpringBoot3.X的版本就使用Flowable7.0.X以下的版本就好。

1.png

二、创建项目

1.建立工程

平平无奇地创建一个项目,我的本机JDK版本为17,这里也就不做调整了。
2.png
由于SpringBoot2.X版本已经不再维护了,所以在创建时只能选择SpringBoot3.X版本,但是没关系,我们可以创建成功后在pom文件里修改一下。这里演示demo,我还是选择老版本咯。
3.png
通过查看github,可以看到 flowable 6.X最新的稳定版本是6.8.1,我也就使用这个版本了。所以,这里也想告诉初学者的一个点就是一定要学会去看文档,毕竟教程是具有滞后性的。通过官方的文档说明,我们springboot版本就使用2.7.18吧。

最终,我们的环境是JDK17、Springboot2.7.18、flowable 6.8.1,如果flowable 7.0.X以下的小伙伴使用JDK8也可以,我这只是懒得换环境。

2.导入依赖

这里主要就是Flowable的核心依赖,其他都是通用依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.pitayafruit</groupId>
    <artifactId>FlowableDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>FlowableDemo</name>
    <description>FlowableDemo</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <!-- spring-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- spring-boot-test -->
        <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.8.1</version>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.21</version>
        </dependency>

        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!-- 日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>2.0.12</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3.建立数据库

Flowable需要数据库来存储数据,所以我们需要为它建立一个数据库,表结构则会由引擎为我们自动生成。
5.png

4.创建配置文件

配置没什么好说的,大家根据自己的情况进行配置就好。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/flowable-demo?characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456

5.启动项目测试

项目成功启动时,我们可以看到控制台闪过很多提示信息,那是第一次启动项目,Flowable在为我们创建表。
6.png
项目启动成功后,可以在数据库中看到79张表,表示我们初步的整合已经成功了。另外,在实际业务中有条件的话,建议将工作流单独部署一个服务和数据库,一下子多了这么多的表在原有的数据库里,对我们管理还是有影响的。
7.png

三、表结构

为了更好地理解 Flowable 的实现原理和细节,有必要先理清楚相关表结构及其作用,接下来,我来帮各位读者梳理一下生成的这79张表。

1.表结构分类

Flowable在初始化时会创建五类表结构,具体如下:

  • ACT_RE:'RE’表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则等等)。
  • ACT_RU:'RU’表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据。Flowable只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表可以一直很小速度很快。
  • ACT_HI:'HI’表示history。这些表包含历史数据,比如历史流程实例,变量,任务等。
  • ACT_GE:'GE’表示general。存储Flowable在各种不同场景下需要的通用数据。
  • ACT_ID:'ID’表示identity (组织机构)。这些表包含标识的信息,如用户,用户组等。

其中ACT_ID类型的表应该在实际业务中是用不上的,因为实际业务都有自己的一套用户表结构,Flowable 里的这套应该是用不上的。

2.常用表的作用

第一次学习的同学可能乍一看这79张表会感到头疼,光是理清楚每张表和字段的作用就要花很长时间。但实际业务中,就像前文中说的,有些表我们从来就不会用,比如引擎自带的用户相关的表,在我们实际业务中,有我们自己的用户组关系和字段,所以在下面的表格中也不做罗列。

表名 解释
ACT_GE_BYTEARRAY 存储通用的流程定义和流程资源,即每个流程的部署记录。
ACT_GE_PROPERTY 存储系统相关属性,主要是Flowable 自身的一些变量。
ACT_HI_ACTINST 存储历史的活动信息,记录流程流转过的所有节点。
ACT_HI_ATTACHMENT 存储历史的流程的附件表。
ACT_HI_COMMENT 存储历史的流程说明性信息。
ACT_HI_DETAIL 存储历史的流程运行的细节信息,比如流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
ACT_HI_ENTITYLINK 存储历史参与的人员。
ACT_HI_IDENTITYLINK 存储任务参与者数据,主要存储历史节点参与者的信息,可能是 Group 也可能是 User。
ACT_HI_PROCINST 存储历史的流程实例,保存每一个历史流程,创建时就生成,一条流程实例对应一个记录。
ACT_HI_TASKINST 存储历史的任务实例,记录每一个历史节点,一个 Task 对应一个记录。
ACT_HI_TSK_LOG 存储历史的任务操作日志,每一次执行可能会带上数据,存在这里。
ACT_HI_VARINST 存储历史的流程运行中的变量信息。
ACT_RE_DEPLOYMENT 存储流程部署记录,每次服务重启会部署一次,这里会新增一条记录。
ACT_RE_MODEL 存储模型信息,创建模型时,额外定义的一些模型相关信息,存在这张表,默认不保存。
ACT_RE_PROCDEF 存储已部署的流程定义,记录流程的变更,流程每变更一次存一条记录,version_字段加1。
ACT_RU_EVENT_SUBSCR 存储运行时事件,当流程定义使用事件(信号/消息/等或启动/中间/边界)时,引擎将对该表的引用存储在该表中。
ACT_RU_EXECUTION 存储运行时流程执行实例和指向流程实例当前状态的指针。
ACT_RU_IDENTITYLINK 存储运行时用户关系信息,即任务节点与参与者的相关信息。
ACT_RU_JOB 存储运行时作业。
ACT_RU_TASK 存储运行时任务。
ACT_RU_VARIABLE 存储运行时变量,是与实例相关的变量。

即使仅仅罗列出这些表,初学者可能依然会觉得很难“记”,但就像我们初学编程时一样,其实根本不需要特意记一些API,在用的过程中慢慢就熟悉了,在下一篇文章里,将带领大家正式开始编码,通过跑完一个简易的流程,让各位读者可以对相关API和表结构有一个初步的认识。😃

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
数据可视化 前端开发 Java
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)(一)
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)
1400 0
|
9天前
|
前端开发 Java API
SpringBoot整合Flowable【06】- 查询历史数据
本文介绍了Flowable工作流引擎中历史数据的查询与管理。首先回顾了流程变量的应用场景及其局限性,引出表单在灵活定制流程中的重要性。接着详细讲解了如何通过Flowable的历史服务API查询用户的历史绩效数据,包括启动流程、执行任务和查询历史记录的具体步骤,并展示了如何将查询结果封装为更易理解的对象返回。最后总结了Flowable提供的丰富API及其灵活性,为后续学习驳回功能做了铺垫。
21 0
SpringBoot整合Flowable【06】- 查询历史数据
|
9天前
|
Java 开发者
SpringBoot整合Flowable【01】- 初识工作流引擎
本文介绍了工作流的基本概念,重点讲解了BPM(业务流程管理)和BPMN 2.0(业务流程建模符号)的关系,以及工作流引擎的发展。BPM是一种管理思想,BPMN是实现该思想的工具。文中还介绍了Flowable、Activiti等主流工作流引擎,并详细说明了流程设计的五种方式,包括FlowableUI、BPMN.js自定义、第三方设计器和代码实现等。最后通过一个请假流程图解释了流程图的组成元素,如事件、连线、任务和网关,帮助读者更好地理解工作流的设计与实现。
66 3
|
9天前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
52 0
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
9天前
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
26 0
|
9天前
|
存储 前端开发 Java
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
本文介绍了如何使用Flowable的流程变量来管理绩效流程中的自定义数据。首先回顾了之前的简单绩效流程,指出现有流程缺乏分数输入和保存步骤。接着详细解释了流程变量的定义、分类(运行时变量和历史变量)及类型。通过具体代码示例展示了如何在绩效流程中插入全局和局部流程变量,实现各节点打分并维护分数的功能。最后总结了流程变量的使用场景及其在实际业务中的灵活性,并承诺将持续更新Flowable系列文章,帮助读者更好地理解和应用Flowable。 简要来说,本文通过实例讲解了如何利用Flowable的流程变量功能优化绩效评估流程,确保每个环节都能记录和更新分数,同时提供了全局和局部变量的对比和使用方法。
37 0
|
9天前
|
XML 前端开发 Java
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
35 0
|
2月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
518 1
|
7月前
|
数据可视化 Java 数据库
手把手实现springboot整合flowable,非常简单【附源码.视频】
手把手实现springboot整合flowable,非常简单【附源码.视频】
391 2
|
2月前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
312 0