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

Spring Boot+Activiti7入坑指南初阶版

介绍 

Activiti 是一个轻量级工作流程和业务流程管理 (BPM) 平台,面向业务人员、开发人员和系统管理员。其核心是一个超快且坚如磐石的 Java BPMN 2 流程引擎。它是开源的,并根据 Apache 许可证分发。Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。它与 Spring 完美集成,非常轻量级并且基于简单的概念。
官网地址: Open Source Business Automation | Activiti
guithub地址: GitHub - Activiti/Activiti: Activiti is a light-weight workflow and Business Process Management (BPM) Platform targeted at business people, developers and system admins. Its core is a super-fast and rock-solid BPMN 2 process engine for Java. It's open-source and distributed under the Apache license. Activiti runs in any Java application, on a server, on a cluster or in the cloud. It integrates perfectly with Spring, it is extremely lightweight and based on simple concepts.Activiti is a light-weight workflow and Business Process Management (BPM) Platform targeted at business people, developers and system admins. Its core is a super-fast and rock-solid BPMN 2 process engine for Java. It's open-source and distributed under the Apache license. Activiti runs in any Java application, on a server, on a cluster or in the cloud. It integrates perfectly with Spring, it is extremely lightweight and based on simple concepts. - GitHub - Activiti/Activiti: Activiti is a light-weight workflow and Business Process Management (BPM) Platform targeted at business people, developers and system admins. Its core is a super-fast and rock-solid BPMN 2 process engine for Java. It's open-source and distributed under the Apache license. Activiti runs in any Java application, on a server, on a cluster or in the cloud. It integrates perfectly with Spring, it is extremely lightweight and based on simple concepts.https://github.com/Activiti/Activiti?tab=readme-ov-file

插件安装

在idea插件中安装绘图插件
解决中文乱码
  • 在IDEA中将File–>Settings–>Editor–>File Encodings修改为UTF-8
  • 在IDEA的Help–>Edit Custom VM Options中末尾添加-Dfile.encoding=UTF-8
  • 在IDEA的安装目录的bin目录下将idea.exe.vmoptionsidea64.exe.vmoptions两个文件末尾添加-Dfile.encoding=UTF-8
  • 重启idea

Activiti7使用

创建Spring Boot项目

使用IDE中的Spring Boot项目创建向导,创建一个新的Spring Boot项目。

添加依赖

<?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.1.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>oa-activiti-workflow</artifactId><version>0.0.1-SNAPSHOT</version><name>oa-activiti-workflow</name><description>oa-activiti-workflow</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><activiti-dependencies.version>7.1.0.M3.1</activiti-dependencies.version></properties><dependencyManagement><dependencies><dependency><groupId>org.activiti.dependencies</groupId><artifactId>activiti-dependencies</artifactId><version>${activiti-dependencies.version}</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><artifactId>junit-jupiter</artifactId><groupId>org.junit.jupiter</groupId></exclusion></exclusions></dependency><!--activiti 7.x依赖 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><!-- 由于activiti7是使用mybatis作为orm框架,我这里整合mybatis-plus,所以需要排除mybatis --><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.2</version> <!-- 或最新版本 --><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

配置数据库和Activiti配置

spring.application.name=oa-activiti-workflow
server.port=18080
# 数据库链接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=rootroot# 配置mybatis plus打印sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# activiti配置
## 检测历史表是否存在 activiti7默认没有开启数据库历史记录 启动数据库历史记录
spring.activiti.db-history-used=true
# 记录历史等级 可配置的历史级别有none, activity, audit, full
## none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
## activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
## audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
## full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等
spring.activiti.history-level=full
## 1.false:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
## 2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
## 3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
## 4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
spring.activiti.database-schema-update=true
# 校验流程文件,默认校验resources下的processes文件夹里的流程文件
spring.activiti.check-process-definitions=false

启动类

package com.example.oaactivitiworkflow;import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;@SpringBootApplication(exclude = {//activiti 默认整合security,屏蔽Security认证SecurityAutoConfiguration.class,ManagementWebSecurityAutoConfiguration.class,JndiDataSourceAutoConfiguration.class,XADataSourceAutoConfiguration.class
})
public class OaActivitiWorkflowApplication {public static void main(String[] args) {SpringApplication.run(OaActivitiWorkflowApplication.class, args);}}

注意事项

spring.activiti.database-schema-update=true配置完启动测试后,发现发生了报错无法自动创建表。报错内容如下
Caused by: org.activiti.engine.ActivitiException: Could not update Activiti database schema: unknown version from database: '8.1.0'
该错误是由于  Activiti引擎版本与数据库架构版本不匹配 导致的。具体表现为:
  1. 数据库中记录的Activiti架构版本(schema.version)为8.1.0,但当前项目使用的Activiti依赖版本无法识别该版本号。
  2. 常见原因包括:
  • 项目依赖的Activiti版本低于数据库中的架构版本。
  • 数据库版本信息被手动修改或未正确初始化。
  • 依赖冲突导致实际加载的Activiti版本与预期不符。
解决办法:
  • 手动下载创建表的sql,地址:
Activiti/activiti-core/activiti-engine/src/main/resources/org/activiti/db/create at develop · Activiti/Activiti · GitHubActiviti is a light-weight workflow and Business Process Management (BPM) Platform targeted at business people, developers and system admins. Its core is a super-fast and rock-solid BPMN 2 process engine for Java. It's open-source and distributed under the Apache license. Activiti runs in any Java application, on a server, on a cluster or in the cloud. It integrates perfectly with Spring, it is extremely lightweight and based on simple concepts. - Activiti/activiti-core/activiti-engine/src/main/resources/org/activiti/db/create at develop · Activiti/Activitihttps://github.com/Activiti/Activiti/tree/develop/activiti-core/activiti-engine/src/main/resources/org/activiti/db/create
  • 在数据库中执行创建:
  • 修改版本信息,因为我使用的Activiti版本是7.1.0对应的scheme.version为7.0.0.0:
UPDATE ACT_GE_PROPERTY SET VALUE_ = '7.0.0.0' WHERE NAME_ = 'schema.version';
修改后启动build正常。

Activiti表介绍

Activiti 的表都以 ACT_ 开头。
Activiti 使用到的表都是 ACT_ 开头的。表名的第二部分用两个字母表明表的用途。
  • ACT_GE_ (GE) 表示 general 全局通用数据及设置,各种情况都使用的数据。
  • ACT_HI_ (HI) 表示 history 历史数据表,包含着程执行的历史相关数据,如结束的流程实例,变量,任务,等等
  • ACT_ID_ (ID) 表示 identity 组织机构,用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。
  • ACT_RE_ (RE) 表示 repository 存储,包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
  • ACT_RU_ (RU) 表示 runtime 运行时,运行时的流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。

数据表介绍

一般数据

表名说明
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_EVENT_SUBSCR运行时事件表
ACT_RU_EXECUTION运行时流程执行实例表
ACT_RU_IDENTITYLINK存储任务节点与参与者关系的运行时用户信息表
ACT_RU_JOB运行时作业表
ACT_RU_TASK运行时任务表
ACT_RU_VARIABLE运行时变量表

表说明

act_ge_bytearray

  • 二进制数据表,存储通用的流程定义和流程资源
字段名字段描述数据类型主键允许空取值说明
ID_主键IDnvarchar(64)YN表的主键标识
REV_乐观锁版本号intNY用于实现乐观锁控制的版本字段
NAME_部署文件名称nvarchar(255)NY流程定义文件名称,如: leave.bpmn.png
DEPLOYMENT_ID_部署IDnvarchar(64)NY关联部署表的ID
BYTES_文件内容varbinary(max)NY存储部署文件的二进制数据
GENERATED_文件生成来源标识tinyintNY0表示用户生成,1表示系统自动生成

act_ge_property

  • 属性数据表:属性数据表。存储整个流程引擎级别的数据。
    字段名字段描述数据类型主键允许为空取值说明
    NAME_名称nvarchar(64)
    VALUE_nvarchar(300)5.create(5.)
    REV_乐观锁intversion

act_hi_actinst

  • 历史节点表:历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,taskinst只记录usertask内容
字段名称字段描述数据类型主键为空取值说明
ID_ID标识nvarchar(64)
PROC_DEF_ID_流程定义IDnvarchar(64)
PROC_INST_ID_流程实例IDnvarchar(64)
EXECUTION_ID_执行实例IDnvarchar(64)
ACT_ID_节点IDnvarchar(225)节点定义ID
TASK_ID_任务实例IDnvarchar(64)任务实例ID(其他节点类型实例ID为空)
CALL_PROC_INST_ID_外部调用流程实例IDnvarchar(64)外部调用流程的实例ID
ACT_NAME_节点名称nvarchar(225)节点定义名称
ACT_TYPE_节点类型nvarchar(225)如startEvent、userTask
ASSIGNEE_签收人nvarchar(64)节点签收人
START_TIME_开始时间datetime
END_TIME_结束时间datetime
DURATION_耗时numeric(19,0)毫秒值
DELETE_REASON_删除原因nvarchar(4000)
TENANT_ID_租户IDnvarchar(225)

act_hi_attachment

  • 历史附件表
字段名称
字段描述
数据类型
主键
为空
取值说明
ID_
ID_
nvarchar(64)
主键ID
REV_
乐观锁
integer
Version
USER_ID_
用户ID
nvarchar(255)
用户ID
NAME_
名称
nvarchar(255)
附件名称
DESCRIPTION_
描述
nvarchar(4000)
描述
TYPE_
类型
nvarchar(255)
附件类型
TASK_ID_
任务实例ID
nvarchar(64)
节点实例ID
PROC_INST_ID_
流程实例ID
nvarchar(64)
流程实例ID
URL_
URL_
nvarchar(4000)
附件地址
CONTENT_ID_
字节表的ID
nvarchar(64)
ACT_GE_BYTEARRAY的ID
TIME_
datetime

act_hi_comment

  • 历史意见表
字段名称字段描述数据类型主键允许为空取值说明
ID_ID标识nvarchar(64)主键ID
TYPE_类型nvarchar(255)类型:event(事件)comment(意见)
TIME_时间datetime记录时间
USER_ID_用户IDnvarchar(64)操作人ID
TASK_ID_节点任务IDnvarchar(64)节点实例ID
PROC_INST_ID_流程实例IDnvarchar(255)流程实例ID
ACTION_行为类型nvarchar(64)具体说明见备注1
MESSAGE_基本信息nvarchar(4000)存储流程生成信息,如审批意见
FULL_MSG_完整内容varbinary(max)附件存储地址

act_hi_detail 

  • 历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
字段名称
字段描述
数据类型
主键
为空
取值说明
ID_
ID_
nvarchar(64)
主键
TYPE_
类型
nvarchar(255)
见备注2
PROC_INST_ID_
流程实例ID
nvarchar(64)
流程实例ID
EXECUTION_ID_
执行实例ID
nvarchar(64)
执行实例ID
TASK_ID_
任务实例ID
nvarchar(64)
任务实例ID
ACT_INST_ID_
节点实例I

相关文章:

  • HbuilderX设置禁止import 引入模块换行
  • HOW - 简历和求职面试宝典(七)
  • spring的多语言怎么实现?
  • [解决]在 Vue 3 使用 Vite 开发的项目中,放在 public 文件夹里的文件,在打包部署后出现 404 的问题
  • Linux `|` 管道符与 `grep` 命令深度解析与高阶应用指南
  • 国产化redis 替代产品tendis 安装
  • siglip2(1) 设置模型返回所需变量
  • Redis--缓存击穿详解及解决方案
  • 动态规划法在解决实际问题中的应用
  • 论文笔记:DreamDiffusion
  • CDN安全加速:HTTPS加密最佳配置方案
  • 【深度学习】13. 图神经网络GCN,Spatial Approach, Spectral Approach
  • ABP 框架集成 EasyAbp.Abp.GraphQL 构建高性能 GraphQL API
  • 蓝牙和wifi相关的杂项内容总结
  • <线段树>
  • [嵌入式实验]实验四:串口打印电压及温度
  • Java求职面试:从核心技术到AI与大数据的全面考核
  • 不起火,不爆炸,高速摄像机、数字图像相关DIC技术在动力电池新国标安全性能测试中的应用
  • 005 ElasticSearch 许可证过期问题
  • 深入了解linux系统—— 库的制作和使用
  • wordpress新用户站点/推广专员
  • 一个网站建设流程图/活动推广软文
  • 苏州网站推广电话/谷歌浏览器手机版免费官方下载
  • 学院网站的系统建设方式/磁力猫搜索引擎入口官网
  • 人才市场网站源码/长沙网站seo排名
  • wordpress wportal/郑州靠谱seo电话