likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 2

一、版本选择

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

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

二、创建项目

1.建立工程

平平无奇地创建一个项目,我的本机JDK版本为17,这里也就不做调整了。

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

由于SpringBoot2.X版本已经不再维护了,所以在创建时只能选择SpringBoot3.X版本,但是没关系,我们可以创建成功后在pom文件里修改一下。这里演示demo,我还是选择老派的版本咯。

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

通过查看github,可以看到 flowable 6.X最新的稳定版本是6.8.1,我也就使用这个版本了。所以,这里也想告诉初学者的一个点就是一定要学会去看文档,毕竟教程是具有滞后性的。通过官方的文档说明,我们springboot版本就使用2.7.18吧。

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

最终,我们的环境是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需要数据库来存储数据,所以我们需要为它建立一个数据库,表结构则会由引擎为我们自动生成。 SpringBoot整合Flowable【02】- 整合の初体验

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在为我们创建表。

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

项目启动成功后,可以在数据库中看到79张表,表示我们初步的整合已经成功了。另外,在实际业务中有条件的话,建议将工作流单独部署一个服务和数据库,一下子多了这么多的表在原有的数据库里,对我们管理还是有影响的。

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

三、表结构

为了更好地理解 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和表结构有一个初步的认识。😃