目錄
一、前言
本文就開始實際接觸Activiti,全文就是先以SpringBoot整合Activiti,SpringBoot工程是由idea自動創建的,因爲版本是最新的2.1.6.RELEASE,Activiti則爲穩定的6.0版本,當然本文也只是先整合Activiti創建出工作流所需要的28張表,然後在最後會解釋這些表的含義並大致介紹Activiti常用Service服務的作用。
二、SpringBoot整合Activiti
1、先在idea下創建一個SpringBoot工程,如果不會請參照:idea快速開始一個SpringBoot項目
2、添加mysql驅動和Activiti的pom依賴:
<!-- mysql驅動包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Activiti依賴 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
3、在yaml文件中配置mysql數據源和Activiti基礎設置
spring:
datasource:
url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=true&nullCatalogMeansCurrent=true
username: xxx
password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
# Activiti工作流配置
activiti:
# 自動部署驗證設置:true-開啓(默認) false-關閉
check-process-definitions: false
# 在activiti的默認配置中,process-definition-location-prefix 是指定activiti流程描述文件的前綴(即路徑),啓動時,activiti就會去尋找此路徑下的流程描述文件,並且自動部署;suffix 是一個String數組,表示描述文件的默認後綴名,默認以上兩種。
# process-definition-location-prefix: classpath:/processes/
# # process-definition-location-suffixes:
# # - **.bpmn
# # - **.bpmn20.xml
# history-level: full
4、由於SpringBoot和Activiti中都有SecurityAutoConfiguration類,所以如果不排除一個在啓動的時候會報錯,這邊我是把Activiti中的該類給排除在外,在啓動類上執行如下操作即可,@MapperScan只是在整合mybatis時有用。
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@MapperScan("activiti.activiti.dao")
public class ActivitiApplication {
public static void main(String[] args) {
SpringApplication.run(ActivitiApplication.class, args);
}
}
5、然後點擊啓動Activiti就能自動創建28張表,Activiti的建表策略爲:無則創建,有則更新,此時打開mysql,可看到所有Activiti的數據表:
Ps:如果啓動失敗,出現如下報錯:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'test.ACT_GE_PROPERTY' doesn't exist
### The error may exist in org/activiti/db/mapping/entity/Property.xml
### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline
### The error occurred while setting parameters
### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?
### Cause: java.sql.SQLSyntaxErrorException: Table 'test.ACT_GE_PROPERTY' doesn't exist
這種情況主要是因爲Activiti串庫查詢了,即假設有兩個數據庫dev和test,當dev和test均無Activiti的表時,連接任意一個數據庫均能創建成功,當任意一個庫存在Activiti表時,連接另外一個庫則啓動直接報上面的錯。換句話說就是你所連接的mysql服務器中存在某個庫已經擁有Activiti的表了因此啓動報錯,該問題的原因主要是因爲你的mysql版本可能過高,我本地的mysql版本爲8.0.14,由於版本過高導致mysql的nullCatalogMeansCurrent屬性默認爲false,即在getTables方法時會遍歷當前驅動下的所有表,以判斷是否存在Activiti表,當該參數屬性爲true時,則使用指定的庫來執行查詢語句不會遍歷。
所以只需要在mysql的url後面加上&nullCatalogMeansCurrent=true即可解決~
三、Activiti數據表含義
先整體看下五大類數據表含義:
數據表分類 | 描述 |
---|---|
ACT_GE_* | 通用數據表 |
ACT_RE_* | 流程定義存儲表 |
ACT_ID_* | 身份信息表 |
ACT_RU_* | 運行時數據庫表 |
ACT_HI_* | 歷史數據庫表, 爲了保證運行時數據儘可能少, 流程執行完就會將相關數據遷移到歷史表中 |
1、通用數據庫
數據表分類 | 描述 |
---|---|
ACT_GE_PROPERTY | 屬性表(保存流程引擎的 kv 鍵值屬性) |
ACT_GE_BYTEARRAY | 資源表(存儲流程定義相關的資源, 如 xml, 流程定義圖) |
2、流程定義存儲表
數據表分類 | 描述 |
---|---|
ACT_RE_DEPLOYMENT | 流程部署記錄表 |
ACT_RE_PROCDEF | 流程定義信息表 |
ACT_RE_MODEL | 模型信息表(用於 web 設計器) |
ACT_PROCDEF_INFO | 流程定義動態改變信息表 |
3、身份數據表
數據表設計 | 描述 |
---|---|
ACT_ID_USER | 用戶的基本信息 |
ACT_ID_INFO | 用戶的擴展信息 |
ACT_ID_GROUP | 羣組 |
ACT_ID_MEMBERSHIP | 用戶與羣組關係 |
4、運行時流程數據表
數據表分類 | 描述 |
---|---|
ACT_RU_EXECUTION | 流程實例與分支執行信息 |
ACT_RU_TASK | 用戶任務信息 |
ACT_RU_VARIABLE | 變量信息 |
ACT_RU_IDENTITYLINK | 參與者相關信息 |
ACT_RU_EVENT_SUBSCR | 事件監聽表 |
ACT_RU_JOB | 作業表 |
ACT_RU_TIMER_JOB | 定時器表 |
ACT_RU_SUSPENDED_JOB | 暫停作業表 |
ACT_RU_DEADLETTER_JOB | 死信表 |
5、歷史流程數據表
數據表分類 | 描述 |
---|---|
ACT_HI_PROCINST | 歷史流程實例表 |
ACT_HI_ACTINST | 歷史節點信息表, 執行過程中每經過一個節點就會插入一條記錄 |
ACT_HI_TASKINST | 歷史任務表 |
ACT_HI_VARINST | 歷史變量 |
ACT_HI_IDENTITYLINK | 歷史參與者 |
ACT_HI_DETAIL | 歷史變更, 當使用 FormService 提交表單時, 表單的屬性就會存儲在該表, 以及變量的更改 |
ACT_HI_ATTACHMENT | 附件 |
ACT_HI_COMMENT | 評論 |
ACT_EVT_LOG | 事件日誌 |
四、Activiti提供的Service服務介紹
Activiti的核心Api圖如下:
不過SpringBoot環境下不再以activiti.cfg.xml文件的形式配置,使用配套starter後直接在配置文件中配置即可,不再需要像Spring那樣在xml中定義流程引擎以及一些常用Service接口
- RepositoryService:提供一系列管理流程部署和流程定義的API。
- RuntimeService:在流程運行時對流程實例進行管理與控制。
- TaskService:對流程任務進行管理,例如任務提醒、任務完成和創建任務等。
- IdentityService:提供對流程角色數據進行管理的API,這些角色數據包括用戶組、用戶及它們之間的關係。
- ManagementService:提供對流程引擎進行管理和維護的服務,提供對activiti數據庫的直接訪問【一般不用】
- HistoryService:對流程的歷史數據進行操作,包括查詢、刪除這些歷史數據。
- FormService:表單服務