版權聲明:轉載注明出處就OK的說,有些東西會轉載,都會注明的說= =如果有冒犯麻煩見諒 https://blog.csdn.net/Pan1458689676/article/details/82560185
基本流程講解與開發前奏
springboot環境下不再以activiti.cfg.xml檔案的形式配置,可在yml内配置,yml配置會在後文講解。
RepositoryService:對流程定義進行管理。
RuntimeService:對流程執行個體的管理。
TaskService:對流程任務進行管理。
IdentityService:管理使用者和使用者組。
ManagementService:提供對activiti資料庫的直接通路【一般不用】。
HistoryService:對流程的曆史資料進行操作。
FormService:動态表單。
1.加入配置
spring:
activiti:
database-schema-update: false
check-process-definitions: false
activiti使用starter配置後屬于spring下。
check-process-definitions【檢查Activiti資料表是否存在及版本号是否比對】預設為true,自動建立好表之後設為false。設為false會取消自動部署功能。
database-schema-update【在流程引擎啟動和關閉時處理資料庫模式】如下(摘自官網)
- false (預設值):在建立流程引擎時檢查庫模式的版本,如果版本不比對則抛出異常。
- true:在建立流程引擎時,執行檢查并在必要時對資料庫中所有的表進行更新,如果表不存在,則自動建立。
- create-drop:在建立流程引擎時,會建立資料庫的表,并在關閉流程引擎時删除資料庫的表。
準備步驟
1.測試項目結構:主要為做工作流部署的兩種形式,zip為bpmn與png檔案的壓縮檔案
2.安裝eclipse activiti插件
https://www.cnblogs.com/mingforyou/p/5347561.html【百度找了一個老哥的,這個就你們自己去倒騰了。難度不大】
3.流程圖如下
代碼後續用到功能時會貼出
打開測試類
部署流程定義
/**部署流程定義*/
@Test
public void deploy(){
Deployment deployment = repositoryService.createDeployment()//建立一個部署對象
.name("helloworld入門程式")
.addClasspathResource("bpmn/MyProcess.bpmn")//從classpath的資源中加載,一次隻能加載一個檔案
.addClasspathResource("bpmn/MyProcess.png")
.deploy();
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名稱:"+deployment.getName());
}
部署過程同時會影響三張表的資料
ACT_RE_DEPLOYMENT(第二行)
ACT_GE_BYTEARRAY(檔案會被存在這張表内,activiti以縱表方式存儲資料)
ACT_RE_PROCDEF
部署流程定義(zip)
/**部署流程定義(zip) */
@Test
public void deployzip() throws IOException{
InputStream in = this.getClass().getClassLoader().getResourceAsStream("bpmn/MyProcess.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment deployment = repositoryService.createDeployment()
.name("helloworld入門程式2")
.addZipInputStream(zipInputStream)//指定zip格式的檔案完成部署
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名稱:"+deployment.getName());
zipInputStream.close();
}
【PS:流程執行個體可以重複部署,有版本号作為辨別】
删除流程定義
/**删除流程定義*/
@Test
public void deleteProcess(){
String deploymentId = "25001";
/**不帶級聯的删除:隻能删除沒有啟動的流程,如果流程啟動,就會抛出異常*/
// repositoryService.deleteDeployment(deploymentId);
/**級聯删除:不管流程是否啟動,都能可以删除(emmm大概是一鍋端)*/
repositoryService.deleteDeployment(deploymentId, true);
System.out.println("删除成功!");
}
【多個流程執行個體之間不會互相影響】
注入Service
啟動流程執行個體
/**啟動流程執行個體*/
@Test
public void startProcessInstance(){
//流程定義的key
String processDefinitionKey = "myProcess";
//key對應MyProcess.bpmn檔案中id的屬性值,使用key值啟動,預設是按照最新版本的流程定義啟動
ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程執行個體ID:"+pi.getId());//流程執行個體ID
System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID
}
查詢流程執行個體
/**查詢流程執行個體*/
@Test
public void searchProcessInstance(){
String processDefinitionKey = "myProcess";
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processDefinitionKey(processDefinitionKey)
.singleResult();
System.out.println("流程執行個體ID:"+pi.getId());
System.out.println("流程定義ID:"+pi.getProcessDefinitionId());
}
流程執行個體的删除
/**流程執行個體的删除*/
@Test
public void deleteProcessInstanceTest(){
String processDefinitionKey = "myProcess";
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processDefinitionKey(processDefinitionKey)
.singleResult();
String processInstanceId = pi.getProcessInstanceId();
System.out.println("流程執行個體ID:"+pi.getId());
runtimeService.deleteProcessInstance(processInstanceId,"删除測試");
}