前言
activiti api是一個工作流程(workflow)和業務流程管理(bpm)系統,可以定義流程、執行流程并以不同方式對其實現運行。使用api??的開發可以在任何ide中完成,但是要使用activiti designer需要eclipse,idea中使用actibpm插件。
定義流程有幾種方式:
1. 使用bpmn 2.0標準在定義一個流程xml。
2. 使用startevent,endevent,usertask,sequenceflow等java類。
如果我們想要運行進程或訪問任何服務,需要首先創建processengineconfiguration。也就是說,processengineconfiguration是使用activiti api的起始之點,使用這個類也可獲得流程引擎,然后就可以執行工作流和bpmn操作了。
maven依賴:
1
2
3
4
5
6
7
8
9
10
11
|
<dependency> <groupid>org.activiti</groupid> <artifactid>activiti-spring-boot-starter-basic</artifactid> <version> 6.0 . 0 </version> </dependency> <dependency> <groupid>org.activiti</groupid> <artifactid>activiti-spring-boot-starter-security</artifactid> <version> 6.0 . 0 </version> </dependency> |
首先,我們需要配置processengineconfiguration連接到數據庫,常使用xml文件activiti.cfg.xml進行配置:
1
2
3
4
5
6
7
8
9
|
<bean id= "processengineconfiguration" class = "org.activiti.engine.impl.cfg.standaloneinmemprocessengineconfiguration" > <property name= "jdbcurl" value= "jdbc:h2:mem:activiti;db_close_delay=1000" /> <property name= "jdbcdriver" value= "org.h2.driver" /> <property name= "jdbcusername" value= "root" /> <property name= "jdbcpassword" value= "" /> <property name= "databaseschemaupdate" value= "true" /> </bean> |
我們可以得到使用processengines類獲得流程引擎了:
processengine processengine = processengines.getdefaultprocessengine();
調用這條語句將尋找類路徑中activiti.cfg.xml文件,并根據文件中的配置構造processengine。
比如我們可以在測試類中寫入下面代碼來獲得流程引擎:
1
2
3
|
processengine processengine = processengines.getdefaultprocessengine(); assertnotnull(processengine); assertequals( "root" , processengine.getprocessengineconfiguration().getjdbcusername()); |
以上我們通過processengineconfiguration這個配置入口獲得了流程引擎processengine,processengine是我們與activiti的api打交道的主要方式,通過processengine,我們可以訪問各種提供工作流/ bpmn功能的服務,該流程引擎和所有的服務對象都是線程安全的。
該processengines類將掃描的activiti.cfg.xml和activiti-context.xml文件。對于activiti-context.xml文件,將以spring方式創建 - 將創建spring application context并從中獲取processengine。在執行流程期間,將按bpmn文件中定義的順序訪問所有步驟。
為了更進一步了解流程概念,我們先了解一下activiti中的流程概念和術語:
(1) 一個processdefinition代表的業務流程。它用于定義流程中不同步驟的結構和行為。
(2) 部署流程定義意味著將流程定義加載到activiti數據庫中。
(3) 流程定義主要由bpmn 2.0標準定義,也可以使用java代碼定義它們,定義的所有術語也可用作java類。
(4) 一旦我們開始運行流程定義,就可以稱為一個流程process。
(5) processinstance是processdefinition一個執行實例。
(6) 一個startevent與每一個業務流程有關,它表示該流程的切入點,同樣,有一個endevent表示流程的結束。我們可以定義這些事件的條件。
(7) 開始和結束之間的所有步驟(或元素)稱為任務,任務可以是各種類型的。最常用的任務是usertasks和servicetasks。
顧名思義,usertasks需要由用戶手動執行,另一方面,servicetasks配置了一段代碼,每當執行到達這段代碼時,代碼將被執行。
sequenceflows用來連接任務,我們可以通過它將源元素和目標元素連接起來定義一個sequenceflows;同樣,我們還可以在sequenceflow上定義條件,這樣能在流程中創建條件路徑。
下圖是一個請教bpm的定義配置文件,配置元素在上面都有闡述,看圖可產生更直觀的印象:
該流程定義屬于一個processdefinition,起始于startevent,結束于endevent,中間步驟是usertask或servicetask,其中也有sequenceflows進行元素連接。
有了流程定義,我們可以使用activiti提供的服務功能進行流程運行,activiti提供的服務有:
- repositoryservice幫助我們實現流程定義的部署。此服務會處理與流程定義相關的靜態數據。
- runtimeservice管理 processinstances(當前正在運行的進程)以及進程變量
- taskservice會跟蹤 usertasks,需要由用戶手動執行的任務是activiti api的核心。我們可以使用此服務創建任務,聲明并完成任務,分配任務的受讓人等。
- formservice是一項可選服務,它用于定義中開始表單和任務表單。
- identityservice管理用戶和組
- historyservice會跟蹤activiti engine的歷史記錄。我們還可以設置不同的歷史級別。
- managementservice與元數據相關,在創建應用程序時通常不需要
- dynamicbpmnservice幫助我們在不重新部署的情況下更改流程中的任何內容
activiti的流程基礎知識已經準備完成,下面我們以請教為流程說明它的使用:感興趣的朋友們:
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:https://www.jdon.com/springboot/spring-activiti.html