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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理

​一、软件介绍 文末提供程序和源码下载 VoltAgent 是一个开源 TypeScript 框架&#xff0c;用于构建和编排 AI 代理 二、什么是 VoltAgent&#xff1f; AI 代理框架提供了构建由自主代理提供支持的应用程序所需的基础结构和工具。这些代理通常由大型语言模型 &#xff08;&am…

《仿盒马》app开发技术分享-- 订单详情页(端云一体)

开发准备 在之前的章节中我们实现了订单的提交&#xff0c;以及提交之后跳转到确认订单页面&#xff0c;在确认订单页面我们添加了一个入口&#xff0c;这个入口是查询订单&#xff0c;当我们点击入口时&#xff0c;我们需要跳转到一个新的界面&#xff0c;这个界面通过接收上…

传统项目管理总拖延?Scrum敏捷全流程拆解

在互联网高速发展的时代&#xff0c;企业竞争的核心要素正逐渐向 "速度" 倾斜。市场环境瞬息万变&#xff0c;用户需求呈现出多元化、动态化的显著特征&#xff0c;而传统管理模式固有的滞后性与僵化性&#xff0c;已难以匹配快速迭代的市场需求。在此背景下&#xf…

GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作

GelSight Mini 高分辨率视触觉传感器采用先进的光学成像与触觉感知技术&#xff0c;赋予机器人接近人类的触觉能力。该设备可捕捉物体表面微观细节&#xff0c;并生成高精度的2D/3D数字映射&#xff0c;帮助机器人识别形状、纹理及接触力&#xff0c;从而执行更复杂、精准的操作…

【电路笔记 TMS320F28335DSP】McBSP 从源时钟得到 生成时钟 CLKG 帧同步信号 FSG

对应于原文 Multichannel Buffered Serial Port (McBSP)的 2.5.3 Data Clock Generation。 CLKG Figure 2-4. Sample Rate Generator Block Diagram CLKG 是采样率发生器输出的数据位时钟&#xff08;Data Bit Clock&#xff09;&#xff0c;它被用来控制&#xff1a; 数据发…

(25年5.28)ChatGPT Plus充值教程与实用指南:附国内外使用案例与模型排行

更多具体来源&#xff1a;查看原文 ChatGPT Plus 充值教程 由于国内卡无法直接充值 chatgpt&#xff0c;通常需要借助虚拟卡。目前咱们常用的方式是通过虚拟卡平台获取。因平台审核要求这里不细说&#xff0c;具体看原文。 ChatGPT Plus主要使用方向 ChatGPT Plus 提供了更…

38. 自动化测试异步开发之编写客户端异步webdriver接口类

Selenium异步浏览器操作实现原理深度解析 一、AsyncBrowser类核心结构 1.1 类定义与启动方法 class AsyncBrowser(Command):@classmethodasync def start(cls, remote_driver_server: str

国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航

在电动车、储能电站、不间断电源&#xff08;UPS&#xff09;等设备中&#xff0c;蓄电池作为关键的储能单元&#xff0c;其运行状态直接关系到设备的稳定性和使用寿命。而准确监测蓄电池的负载情况&#xff0c;是保障其安全、高效运行的关键。霍尔电流传感器 AH811凭借独特的技…

[Java恶补day8] 3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…

kafka学习笔记(三、消费者Consumer使用教程——从指定位置消费)

1.简介 Kafka的poll()方法消费无法精准的掌握其消费的起始位置&#xff0c;auto.offset.reset参数也只能在比较粗粒度的指定消费方式。更细粒度的消费方式kafka提供了seek()方法可以指定位移消费允许消费者从特定位置&#xff08;如固定偏移量、时间戳或分区首尾&#xff09;开…

【JS进阶】JavaScript 中 this 值的确定规则

JavaScript 中 this 值的确定规则 1. 默认绑定&#xff08;独立函数调用&#xff09; 当函数作为普通函数调用时&#xff0c;this 指向全局对象&#xff08;浏览器中是 window&#xff0c;Node.js 中是 global&#xff09;&#xff0c;严格模式下是 undefined。 function sh…

【凌智视觉模块】rv1106 部署 pp-humseg 模型

人像分割简介 ❀ 凌智视觉模块 是一款基于rv1106芯片开发的视觉模块&#xff0c;专注于视觉模型部署与开发。 人像分割是一种基于计算机视觉的技术&#xff0c;通过深度学习算法精准识别图像或视频中的人物主体&#xff0c;将其与背景进行像素级分离。该技术可实时运行于移动端…

wangeditor富文本编辑器+vue3粘贴内容样式处理

又是一个风格和日立的上午&#xff0c;某只菜鸟高高兴兴的骑着小电驴去上班&#xff0c;本着上班只要不迟到的理念飞速前行&#xff08;迟到扣钱啊~&#xff09;&#xff0c;高高兴兴的行走在路上。来到工位刚拴上我的绳子组长就开始滴滴俺&#xff0c;顿时我心中大感不妙&…

实测,大模型谁更懂数据可视化?

大家好&#xff0c;我是 Ai 学习的老章 看论文时&#xff0c;经常看到漂亮的图表&#xff0c;很多不知道是用什么工具绘制的&#xff0c;或者很想复刻类似图表。 实测&#xff0c;大模型 LaTeX 公式识别&#xff0c;出乎预料 前文&#xff0c;我用 Kimi、Qwen-3-235B-A22B、…

深度学习-梯度消失和梯度爆炸

梯度消失 在某些神经网络中&#xff0c;随着网络深度的增加&#xff0c;梯度在隐藏层反向传播时倾向于变小&#xff0c;这就意味着&#xff0c;前面隐藏层中的神经元要比后面的学习起来更慢&#xff0c;这种现象就叫做“梯度消失”&#xff1b; 梯度爆炸 如果我们进行一些特殊…

Go 语言基础 2 Func,流程控制

更多个人笔记见&#xff1a; github个人笔记仓库 gitee 个人笔记仓库 个人学习&#xff0c;学习过程中还会不断补充&#xff5e; &#xff08;后续会更新在github上&#xff09; 文章目录 Func 函数函数栈概念 函数表示类型 Anonymous func 匿名函数closure 闭包基础示例http利…

【Linux 学习计划】-- 倒计时、进度条小程序

目录 \r 、\n、fflush 倒计时 进度条 进度条进阶版 结语 \r 、\n、fflush 首先我们先来认识这三个东西&#xff0c;这将会是我们接下来两个小程序的重点之一 首先是我们的老演员\n&#xff0c;也就是回车加换行 这里面其实包含了两个操作&#xff0c;一个叫做回车&…

从零实现wss通信示例(WebSocket SSL)

客户端和服务端代码框架跟上一篇一致,仅增加了ssl的证书部分用于加密通信,明文通信(ws协议)见上一篇【https://blog.csdn.net/suoxd123/article/details/148093934】 1. 证书创建 1. 安装openssl 【官网地址】:https://slproweb.com/products/Win32OpenSSL.html 1.2 …

mysql 索引失效有哪些

InnoDB存储引擎根据索引类型不同&#xff0c;分为聚簇索引和二级索引 聚簇索引&#xff1a;叶子节点存放的是实际数据 二级索引&#xff1a;存放的是主键值&#xff0c;不是实际数据 1.对索引使用左或者左右模糊匹配 select * from t_user where name like %林‘&#xff1b…

LabVIEW通用测控平台设计

基于 LabVIEW 图形化编程环境&#xff0c;设计了一套适用于工业自动化、科研测试领域的通用测控平台。通过整合研华、NI等品牌硬件&#xff0c;实现多类型数据采集、实时控制及可视化管理。平台采用模块化架构&#xff0c;支持硬件灵活扩展&#xff0c;解决了传统测控系统开发周…