介紹
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.vmoptions和idea64.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引擎版本與數據庫架構版本不匹配 導致的。具體表現為:
- 數據庫中記錄的Activiti架構版本(schema.version)為8.1.0,但當前項目使用的Activiti依賴版本無法識別該版本號。
- 常見原因包括:
- 項目依賴的Activiti版本低于數據庫中的架構版本。
- 數據庫版本信息被手動修改或未正確初始化。
- 依賴沖突導致實際加載的Activiti版本與預期不符。
解決辦法:
- 手動下載創建表的sql,地址:


- 在數據庫中執行創建:

- 修改版本信息,因為我使用的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_ | 主鍵ID | nvarchar(64) | Y | N | 表的主鍵標識 |
REV_ | 樂觀鎖版本號 | int | N | Y | 用于實現樂觀鎖控制的版本字段 |
NAME_ | 部署文件名稱 | nvarchar(255) | N | Y | 流程定義文件名稱,如: leave.bpmn.png |
DEPLOYMENT_ID_ | 部署ID | nvarchar(64) | N | Y | 關聯部署表的ID |
BYTES_ | 文件內容 | varbinary(max) | N | Y | 存儲部署文件的二進制數據 |
GENERATED_ | 文件生成來源標識 | tinyint | N | Y | 0表示用戶生成,1表示系統自動生成 |
act_ge_property
- 屬性數據表:屬性數據表。存儲整個流程引擎級別的數據。
字段名 字段描述 數據類型 主鍵 允許為空 取值說明 NAME_ 名稱 nvarchar(64) √ VALUE_ 值 nvarchar(300) √ 5.create(5.) REV_ 樂觀鎖 int √ version
act_hi_actinst
- 歷史節點表:歷史活動信息。這里記錄流程流轉過的所有節點,與HI_TASKINST不同的是,taskinst只記錄usertask內容
字段名稱 | 字段描述 | 數據類型 | 主鍵 | 為空 | 取值說明 |
---|---|---|---|---|---|
ID_ | ID標識 | nvarchar(64) | √ | ||
PROC_DEF_ID_ | 流程定義ID | nvarchar(64) | |||
PROC_INST_ID_ | 流程實例ID | nvarchar(64) | |||
EXECUTION_ID_ | 執行實例ID | nvarchar(64) | |||
ACT_ID_ | 節點ID | nvarchar(225) | 節點定義ID | ||
TASK_ID_ | 任務實例ID | nvarchar(64) | √ | 任務實例ID(其他節點類型實例ID為空) | |
CALL_PROC_INST_ID_ | 外部調用流程實例ID | nvarchar(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_ | 租戶ID | nvarchar(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_ | 用戶ID | nvarchar(64) | √ | 操作人ID | |
TASK_ID_ | 節點任務ID | nvarchar(64) | √ | 節點實例ID | |
PROC_INST_ID_ | 流程實例ID | nvarchar(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 |