FIELD NOTE / 项目实践

工作流实践:Activiti 快速入门

记录 Activiti 项目启动、表结构、流程设计器和工作流基础概念。

工程实践工作流

Activiti

介绍

工作流(workflow)就是通过计算机对业务流程自动化执行管理,它主要结局的是多个参与者之间按照某种预定义的规则自动进行传递文档、信息或者任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现。

工作流基于业务流,适用于消费品行业、制造业、电信服务业、物流服务业、物业管理、政府机构等,特别是大的企业集团公司。具体应用在关键业务流程、行政审批流程、人事管理流程等。

比较原始的工作流实现方式无非就是利用审核表或者增加审核字段,通过自己实现业务逻辑对一些步骤进行审批和限制,如果是比较复杂的大型业务模式就显得非常不专业了。

我们这里引入一个开源的工作流引擎 Activiti,它可以将业务中复杂的业务流程抽取出来,使用专门的建模语言 BPMN 2.0 进行定义,减少业务系统因为业务改变造成的任务量,提高系统健壮性,降低系统维护成本。

Activiti 官网

点击跳转官网查看详细内容

快速开始

项目启动

这里我们采用 Spring Boot 2.7.6 + jdk17 + activiti 7.0.0.Beta5 版本来进行学习,这个版本是我经过多次试验才能成功使用的版本,都是血和泪啊,下面是 pom 文件供大家参考。

示例:pom.xml

<?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>
    <groupId>com.sbc</groupId>
    <artifactId>activiti</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>activiti</name>
    <description>Demo project for Spring Boot to learn activiti7</description>

    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <spring-boot.version>2.7.6</spring-boot.version>
        <activiti.version>7.0.0.Beta5</activiti.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-dependencies</artifactId>
            <version>${activiti.version}</version>
            <type>pom</type>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>activiti-releases</id>
            <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
        </repository>
    </repositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.sbc.activiti.ActivitiApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

表结构

activiti 根据配置会在第一次启动的时候创建所需要的表,这些表明根据命名前缀规则分为以下几类:

表分类表名表注释
ACT_EVT_LOG日志表
ACT_PROCDEF_INFO
一般通用数据
ACT_GE_BYTEARRAY通用的流程定义和流程资源
ACT_GE_PROPERTY系统相关属性表
流程历史记录ACT_HI_ACTINST历史的流程实例
ACT_HI_ATTACHMENT历史的流程附件
ACT_HI_COMMENT历史的说明性信息
ACT_HI_DETAIL历史的流程运行中的细节
ACT_HI_IDENTITYLINK历史的流程运行过程中用户关系
ACT_HI_PROCINST历史的流程实例
ACT_HI_TASKINST历史的任务信息
ACT_HI_VARINST历史的流程运行中的变量信息
流程定义表
ACT_RE_DEPLOYMENT部署单元信息
ACT_RE_MODEL模型信息
ACT_RE_PROCDEF已部署的流程定义
运行实例表
ACT_RU_DEADLETTER_JOB
ACT_RU_EVENT_SUBSCR运行时的事件
ACT_RU_EXECUTION运行时流程执行的实例
ACT_RU_IDENTITYLINK运行时用户关系信息
ACT_RU_INTEGRATION
ACT_RU_JOB运行时作业
ACT_RU_SUSPENDED_JOB
ACT_RU_TASK运行时任务
ACT_RU_TIMER_JOB
ACT_RU_VARIABLE运行时变量表

流程设计器

之前较早的版本大家可能为了方便会使用 Eclipse 或者 IDEA 的插件进行 BPMN 流程图设计,但是其插件都过于老旧且一直没有更新了,而在 Activiti6 之后官方推出了一个流程设计器的 war 包工具,可以在本地进行流程图可视化操作,当然在 Activiti7 之后更是有了支持的 Docker 镜像可以使用,如果你不想下载使用的话,最新的官方推荐了一个 Activiti Modeler Application 的在线网站 BPMN.IO 的网站让我们可以在线绘制 BPMN 图,这里我们使用这种方式进行学习。

BPMN.IO 官网

点击跳转官网查看详细内容