一. 介紹
1.activiti是一個(gè)開源的工作流引擎,它實(shí)現(xiàn)了BPMN 2.0規(guī)范,可以發(fā)布設(shè)計(jì)好的流程定義,并通過api進(jìn)行流程調(diào)度。
2.activiti的核心組成
幾大核心api
二. 整合
1.導(dǎo)入依賴
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
需要注意的是,這里的依賴版本,需要對(duì)應(yīng)數(shù)據(jù)庫中act_ge_property表中schema.version版本信息,所以一般不建議在創(chuàng)建完表之后修改依賴信息
2.application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/activitiserverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=truespring.activiti.database-schema-update=true
spring.activiti.check-process-definitions=falsespring.activiti.process-definition-location-prefix=classpath:/processes/
spring.activiti.db-identity-used=true
# process-definition-location-suffixes:
# - **.bpmn
# - **.bpmn20.xml
spring.activiti.db-history-used=true
spring.activiti.history-level=full
3.安裝actibpm插件。file--》plugin--》搜索actiBPM安裝即可。
4.Help-EditCustomVmOption-
-Dfile.encoding=UTF-8
防止bpmn文件中文亂碼
5.啟動(dòng)類
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
- 項(xiàng)目的resource目錄下新建一個(gè)processess文件夾,存放.bpmn文件
在resource/processess下新建一個(gè)bpmn文件,如圖直接拖動(dòng)畫出一個(gè)流程示例
7.點(diǎn)擊空白處設(shè)置id和name。
8.activiti默認(rèn)的ID生成策略在高并發(fā)場景下會(huì)出現(xiàn)ID重復(fù)的情況,因此在高并發(fā)場景下建議采用UUID的策略。修改activiti配置文件,增加以下語句,并增加IdGen類。
@Configuration
public class ActivitiConfigimplements ProcessEngineConfigurationConfigurer {
@Override
public void configure(SpringProcessEngineConfigurationspringProcessEngineConfiguration) {
springProcessEngineConfiguration.setIdGenerator(newIdGeneratorUtil();
}
}
public class IdGeneratorUtilimplements IdGenerator {
/**
* 封裝JDK自帶的UUID, 通過Random數(shù)字生成, 中間無-分割.
*/
public static String uuid() {
return UUID.randomUUID().toString().replaceAll("-","");
}
@Override
public String getNextId() {
return uuid();
}
}
9.啟動(dòng)項(xiàng)目會(huì)在對(duì)應(yīng)數(shù)據(jù)庫中生成28張表
Activiti的后臺(tái)是有數(shù)據(jù)庫的支持的,所有的表都以ACT_開頭。第二部分是表示用途的兩個(gè)字母標(biāo)識(shí)。用途也和服務(wù)的API對(duì)應(yīng)
ACT_RE_*:’RE’表示repository。這個(gè)前綴的表包含了流程定義和流程靜態(tài)資源 (圖片,規(guī)則等等)。
ACT_RU_*:’RU’表示runtime。這些是運(yùn)行時(shí)的表,包含流程實(shí)例,任務(wù),變量,異步任務(wù)等運(yùn)行中的數(shù)據(jù)。Activiti只在流程實(shí)例執(zhí)行過程中保存這些數(shù)據(jù), 在流程結(jié)束時(shí)就會(huì)刪除這些記錄。這樣運(yùn)行時(shí)表可以一直很小且速度很快。
ACT_ID_*:’ID’表示identity。這些表包含身份信息,比如用戶,組等等。
ACT_HI_*:’HI’表示history。這些表包含歷史數(shù)據(jù),比如歷史流程實(shí)例,變量,任務(wù)等等。
ACT_GE_*:通用數(shù)據(jù),用于不同場景下。
資源庫流程規(guī)則表
act_re_deployment:部署信息表
act_re_model:流程設(shè)計(jì)模型部署表
act_re_procdef:流程定義數(shù)據(jù)表
運(yùn)行時(shí)數(shù)據(jù)庫表
act_ru_execution:運(yùn)行時(shí)流程執(zhí)行實(shí)例表
act_ru_identitylink:運(yùn)行時(shí)流程人員表,主要存儲(chǔ)任務(wù)節(jié)點(diǎn)與參與者的相關(guān)信息
act_ru_task:運(yùn)行時(shí)任務(wù)節(jié)點(diǎn)表
act_ru_variable:運(yùn)行時(shí)流程變量數(shù)據(jù)表
act_hi_actinst:歷史節(jié)點(diǎn)表
act_hi_attachment:歷史附件表
act_hi_comment:歷史意見表
act_hi_identitylink:歷史流程人員表
act_hi_detail :歷史詳情表,提供歷史變量的查詢
act_hi_procinst:歷史流程實(shí)例表
act_hi_taskinst:歷史任務(wù)實(shí)例表
act_hi_varinst:歷史變量表
act_id_group :用戶組信息表
act_id_info:用戶擴(kuò)展信息表
act_id_membership:用戶與用戶組對(duì)應(yīng)信息表
act_id_user:用戶信息表
這四張表很常見,基本的組織機(jī)構(gòu)管理,關(guān)于用戶認(rèn)證方面建議還是自己開發(fā)一套,組件自帶的功能太簡單,使用中有很多需求難以滿足。
act_ge_bytearray:二進(jìn)制數(shù)據(jù)表
act_ge_property:屬性數(shù)據(jù)表存儲(chǔ)整個(gè)流程引擎級(jí)別的數(shù)據(jù),初始化表結(jié)構(gòu)時(shí)會(huì)默認(rèn)插入三條記錄
10.部署流程
repositoryService.createDeployment().addClasspathResource("singleAssignee.bpmn").deploy();
11.查詢待辦
List tasks = taskService.createTaskQuery().taskAssignee("kefu").list();
12.根據(jù)流程key開啟一個(gè)流程
ProcessInstance test01 = runtimeService.startProcessInstanceByKey(key);
13.根據(jù)任務(wù)id提交任務(wù)
taskService.complete(taskId);
14.總結(jié)操作
總結(jié)activiti中的幾個(gè)對(duì)象
幾個(gè)和流程相關(guān)的對(duì)象
Deployment:部署對(duì)象,和部署表(act_re_deployment)對(duì)應(yīng)
ProcessDefinition:流程定義對(duì)象,和流程定義表(act_re_procdef)對(duì)應(yīng)
ProcessInstance:流程實(shí)例對(duì)象,和流程實(shí)例表(act_ru_execution)對(duì)應(yīng)
Task:任務(wù)對(duì)象,和任務(wù)表(act_ru_task)對(duì)應(yīng)
幾個(gè)Service對(duì)象
RepositoryService:操作部署、流程定義等靜態(tài)資源信息
RuntimeService:操作流程實(shí)例,啟動(dòng)流程實(shí)例、查詢流程實(shí)例、刪除流程實(shí)例等動(dòng)態(tài)信息
TaskService:操作任務(wù),查詢?nèi)蝿?wù)、辦理任務(wù)等和任務(wù)相關(guān)的信息
HistoryService:操作歷史信息的,查詢歷史信息
IdentityService:操作用戶和組
幾個(gè)Query對(duì)象
DeploymentQuery:對(duì)應(yīng)查詢部署表(act_re_deployment)
ProcessDefinitionQuery:對(duì)應(yīng)查詢流程定義表(act_re_procdef)
ProcessInstanceQuery:對(duì)應(yīng)查詢流程實(shí)例表(act_ru_execution)
TaskQuery:對(duì)應(yīng)查詢?nèi)蝿?wù)表(act_ru_tas