開發環境:JDK1.8+idea工具+maven
首先idea下載插件File->settings->plugins->Marketplace 直接搜索actiBPM下載,之后重啟idea。
流程圖中中文亂碼問題:
找到idea安裝目錄bin目錄下如下圖所示兩個文件,用編輯器打開,在文件末尾添加 -Dfile.encoding=UTF-8 ,然后重啟idea,再打開流程圖就會發現中文已經可以正常顯示了。
創建springboot項目:
引入pom文件包
需要的mysql已經mybatis
啟動類是增加:
-
/**
-
* 去除springboot默認的basic驗證,否則訪問項目需要提供用戶名和密碼
-
*/
-
-
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration. class,
-
SecurityAutoConfiguration. class})
-
public class LambdaApplication {
-
-
public static void main(String[] args) {
-
SpringApplication.run(LambdaApplication. class, args);
-
}
-
-
}
數據源直接使用yml或者properties配置,activiti會自動讀取配置。但需要進行配置,加載數據源
-
/**
-
*這個yml配置絕對不能少,否則啟動會失敗
-
* 意思是每次啟動對自動創建的表進行檢驗
-
*/
-
spring:
-
activiti:
-
history-level: full
-
check-process-definitions: false
然后直接appliction直接啟動項目,會發現數據庫中自動創建了28張表
大致介紹一下這些表:
- ACT_GE 通用類
- ACT_HI 歷史記錄類
- ACT_ID 用戶信息類
- ACT_RE 流程實例類
- ACT_RU 運行時類
詳細的介紹
表名 | 說明 |
---|---|
ACT_EVT_LOG | 事件日志表(實驗性質) |
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_ID_GROUP | 組 |
ACT_ID_INFO | 用戶詳細信息 |
ACT_ID_MEMBERSHIP | 用戶和組關系的中間表 |
ACT_ID_USER | 用戶表 |
ACT_RE_DEPLOYMENT | 部署的流程信息 |
ACT_RE_MODEL | 流程模型信息 |
ACT_RE_PROCDEF | 流程定義信息 |
ACT_RU_DEADLETTER_JOB | 存儲執行失敗的任務表(異步) |
ACT_RU_EVENT_SUBSCR | 運行時事件 |
ACT_RU_EXECUTION | 運行時流程執行實例 |
ACT_RU_IDENTITYLINK | 運行時用戶關系信息 |
ACT_RU_JOB | 運行時作業(異步) |
ACT_RU_SUSPENDED_JOB | 暫停運行的任務(異步) |
ACT_RU_TASK | 運行時任務 |
ACT_RU_TIMER_JOB | 任務定時器表(異步) |
ACT_RU_VARIABLE | 運行時變量表 |
ACT_PROCDEF_INFO | 流程定義信息表 |
-
-
private RuntimeService runtimeService;
-
-
-
private TaskService taskService;
-
-
-
private IdentityService identityService;
-
-
-
private RepositoryService repositoryService;
-
-
-
private ProcessEngine processEngine;
-
-
-
private HistoryService historyService;
springboot直接使用這些service管理操作這些表。就不再需要 processEngine.get***service();
Service | 管理的表 |
---|---|
RepositoryService | 通用類的表 |
FormService | 通過表單提交的任務的服務類 |
HistoryService | 歷史記錄表 |
IdentityService | 用戶信息表 |
ManagementService | 自定義查詢的服務類 managementService.executeCustomSql |
RuntimeService | 運行時相關表 |
TaskService | 任務表, 可以查詢 ACT_RU_ ACT_HI_ |
在resources下創建一個:processes文件夾,放流程文件。之后右鍵點擊文件夾:創建流程文件
這是我創建的一個流程文件,直接保存即可。無需和eclipse一樣需要去生成一個png文件。在使用repositoryService部署流程對象時他會在數據庫的ACT_GE_BYTEARRAY 通用的流程定義和流程資源表中創建保存相應的png以及bpmn文件
這我就不詳細截圖了:分別對應的是name名稱,assignee以及委托人:組長是group,經理是manager,老板是boss
使用方法:
發布流程:
-
/**
-
* 發布流程
-
*
-
* @throws IOException
-
*/
-
@Test
-
public void deploymentProcesses_zip() throws IOException {
-
-
Deployment deploy = repositoryService.createDeployment() //創建一個部署的對象
-
.name( "請假流程定義")//創建流程名稱
-
.addClasspathResource( "processes/activiti_demo.bpmn")//指定zip完成部署
-
.deploy();
-
// long count = repositoryService.createProcessDefinitionQuery().count();
-
System. out.println("部署id" + deploy.getId());
-
System. out.println("部署名稱" + deploy.getName());
-
// System.out.println("部署名稱"+count);
-
-
}
啟動流程:
-
/**
-
* 啟動流程
-
* RuntimeService
-
*/
-
@Test
-
public void startProcess() {
-
//可根據id、key、message啟動流程
-
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey( "myProcess_1");
-
System. out.println(processInstance.getName());
-
System. out.println(processInstance.getProcessDefinitionId());
-
System. out.println(processInstance.getId());
-
}
查看任務:
-
-
/**
-
* 查看任務
-
* TaskService
-
*/
-
@Test
-
public void queryTask() {
-
//根據assignee(代理人)查詢任務
-
String assignee = "manager";
-
List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
-
-
int size = tasks.size();
-
for (int i = 0; i < size; i++) {
-
Task task = tasks.get(i);
-
-
}
-
//獲取最新一條
-
for (Task task : tasks) {
-
System.out.println( "taskId:" + task.getId() +
-
",taskName:" + task.getName() +
-
",assignee:" + task.getAssignee() +
-
",createTime:" + task.getCreateTime());
-
}
-
}
辦理任務:
-
/**
-
* 辦理任務
-
*/
-
-
public void handleTask() {
-
//根據上一步生成的taskId執行任務
-
String taskId = "12505";
-
taskService.complete(taskId);
-
}
這就是一套簡單的業務流程代碼了。
所有的數據可以根據相應的表進行查看,特別注意的是。這只是測試:在相應的項目中如果需要使用,需要根據具體的用戶user以及功能權限進行邏輯處理
- 源碼地址:github源碼 https://github.com/superqinchao/activiti-demo/tree/feature/activiti_demo 分支feature/activiti_demo
參考:https://blog.csdn.net/qinchao_mei/article/details/100661212