Activiti 入門學習筆記(activities)
寫在前面
一直想學習下Activiti,自己之前工作的時候嘗試了很多次,但都失敗了,因為之前的工作就是做工作流的,但是舊項目是自己通過狀態(tài)值驅動流程的,維護困難,新的平臺使用了Activiti5,但是是基于低代碼平臺,都封裝好了,所以我也不知道具體是個啥情況,蹭現在離職了,來之不易的時間,學習一波。哈哈
BPMN設計器(Activiti Modeler)的問題:因為IDEA版本的問題,設計器弄有些麻煩,所以自己網上找了一個輪子做Demo,簡單編碼,做了一些業(yè)務擴展。
筆記是結合B站上的教學視頻做的,作為入門。
碼云上找了一個開源項目,2k的★★,有興趣的小伙伴可以看看。https://gitee.com/shenzhanwang/Spring-activiti/tree/spring-boot-activiti
世界是意志的,是一個痛苦的世界。—叔本華
Activiti Modeler
碼云倉庫Activiti Modeler:https://gitee.com/liruilonger/Activiti-Modeler/blob/master/README.md
具體的Demo代碼:https://gitee.com/liruilonger/Activiti-Modeler.git
設計器搞定了,我們了解下具體的概念吧,先了解一下大概的東西,然后我們基于Springboot Activiti7搭一個開發(fā)環(huán)境,那就愉快的開始Activiti7之旅吧。
Activiti7 學習
一、Activiti7介紹
Activiti是目前使用最為廣泛的開源工作流引擎,2010年5月就正是啟動了。在了解Activiti之前,我們首先要了解下什么是工作流。
工作流WorkFlow
關于什么是工作流:就是“業(yè)務過程的部分或整體在計算機應用環(huán)境下的自動化”,它主要解決的是使在多個參與者之間按照某種預定義的規(guī)則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業(yè)務目標,或者促使此目標的實現”。 其實說直白一點,就是業(yè)務上一個完整的審批(評審)流程。
例如員工的入職、請假、出差、采購等等、還有一些關鍵業(yè)務如訂單申請、合同審核等等,這些過程,都是一個工作流。對于工作流,傳統(tǒng)的處理方式往往需要有人拿著各類的文件,在多個執(zhí)行部門之間不斷的審批。而當我們開始用軟件來協(xié)助處理這一類審批流程時,就開始出現了工作流系統(tǒng)。工作流系統(tǒng)可以減少大量的線下溝通成本,提高工作效率。有了工作流系統(tǒng)之后,才開始出現工作流引擎。
在沒有專門的工作流引擎之前,我們?yōu)榱藢崿F這樣的流程控制,通常的做法都是采用狀態(tài)字段的方式來跟蹤流程的變化情況。例如對一個員工請假請求,我們會定義已申請、組長已審核、部門經理已審核等等這樣一些狀態(tài),然后通過這些狀態(tài)來控制不同的業(yè)務行為,比如部門經理角色只能看到組長已審核通過的,并且請假天數超過3天的訂單等等。這種實現方式實現起來比較簡單,也是軟件系統(tǒng)中非常常用的一種方式。但是這種通過狀態(tài)字段來進行流程控制的方式還是有他的弊端。
一方面:整個流程定義不夠清晰。業(yè)務流程是分散在各個業(yè)務階段中的,從代碼的角度非常難以看到整個流程是如何定義的。
一方面:當流程發(fā)生變更時,這種方式編寫的代碼就需要做非常大的變更。例如從三級審批要增加為四級審批甚至是協(xié)同審批,那各個業(yè)務階段的審批流程都需要隨之做大量的變更。
正是出于這些痛點,后面才有了工作流引擎。使用工作流引擎后,整個審批流程可以在同一個地方進行整體設計,并且當審批流程發(fā)生變更時,業(yè)務程序也可以不用改變。這樣業(yè)務系統(tǒng)的適應能力就得到了極大提升。
其實引擎的思想無處不在。我們有Drools規(guī)則引擎,可以在程序不發(fā)生變動的情況下,集中定義業(yè)務規(guī)則并進行修改。Aviator表達式引擎,可以快速計算某一個表達式的結果。搜索引擎,可以快速進行統(tǒng)一搜索等等。其核心思想都是將業(yè)務之間的共性抽取出來,減少業(yè)務變動對程序的影響。
是一個軟件系統(tǒng),它完成工作量的定義和管理,并按照在系統(tǒng)中預先定義好的工作流規(guī)則進行工作流實例的執(zhí)行。工作流管理系統(tǒng)不是企業(yè)的業(yè)務系統(tǒng),而是為企業(yè)的業(yè)務系統(tǒng)的運行提供了一個軟件的支撐環(huán)境。
給出的關于工作流管理系統(tǒng)的定義是:工作流管理系統(tǒng)是一個軟件系統(tǒng),它通過執(zhí)行經過計算的流程定義去支持一批專門設定的業(yè)務流程。工作流管理系統(tǒng)被用來定義、管理、和執(zhí)行工作流程。
管理工作的流程以確保工作在正確的時間被期望的人員所執(zhí)行——在自動化進行的業(yè)務過程中插入人工的執(zhí)行和干預。
Activiti工作流引擎
Activiti正是目前使用最為廣泛的開源工作流引擎。Activiti的官網地址是 https://www.activiti.org 歷經6.x和5.x兩個大的版本,目前最新的版本是 Activiti Cloud7.1.0-M11。
Activiti 是由 jBPM 的創(chuàng)建者 Tom Baeyens 離開 JBoss 之后建立的項目,構建在開發(fā)jBPM版本1 到4時積累的多年經驗的基礎之上,旨在創(chuàng)建下一代的 BPM 解決方案。
他可以將業(yè)務系統(tǒng)中復雜的業(yè)務流程抽取出來,使用專門的建模語言BPMN2.0進行定義。業(yè)務流程按照預先定義的流程執(zhí)行,整個實現流程完全由activiti進行管理,從而減少業(yè)務系統(tǒng)由于流程變更進行系統(tǒng)改造的工作量,從而減少系統(tǒng)開發(fā)維護成本,提高系統(tǒng)的健壯性。所以使用Activiti,重點就是兩個步驟,首先使用BPMN定義流程,然后使用Activiti框架實現流程。
建模語言BPMN
談到BPMN,首先就要談BPM。 BPM即Business Process Managemenet,業(yè)務流程管理。是一種規(guī)范化的構造端到端的業(yè)務流程,以持續(xù)的提高組織業(yè)務效率。在常見的商業(yè)管理教育如EMBA、MBA中都包含了BPM的課程。
有了BPM的需求,就出現了BPM軟件。他是根據企業(yè)中業(yè)務環(huán)境的變化,推進人與人之間,人與系統(tǒng)之間以及系統(tǒng)與系統(tǒng)之間的整合及調整的經營方法域解決方案的IT工具。
通過對企業(yè)業(yè)務流程的整個生命周期進行建模、自動化、管理監(jiān)控和優(yōu)化,使企業(yè)成本降低,利潤得到提升。BPM軟件在企業(yè)中應用非常廣泛,凡是有業(yè)務流程的地方都可以使用BPM進行管理。比如企業(yè)人事辦公管理、采購流程管理、公文審批流程管理、財務管理等。
而BPMN是Business Process Model And Notation 業(yè)務流程模型和符號,就是用來描述業(yè)務流程的一種建模標準。BPMN最早由BPMI(BusinessProcessManagement Initiative)方案提出。由一整套標準的業(yè)務流程建模符號組成。使用BPMN可以快速定義業(yè)務流程。BPMN最早在2004年5月發(fā)布。2005年9月開始并入OMG(The ObjectManagemenet Group)組織。OMG于2011年1月發(fā)布BPMN2.0的最終版本。BPMN是目前被各大BPM廠商廣泛接受的BPM標準。Activiti就是使用BPMN2.0進行流程建模、流程執(zhí)行管理。整個BPMN是用一組符號來描述業(yè)務流程中發(fā)生的各種事件的。BPMN通過在這些符號事件之間連線來描述一個完整的業(yè)務流程。
表結構解讀
從這些剛才創(chuàng)建的表中可以看到,activiti的表都以act_開頭。第二個部分表示表的用途。用途也和服務的API對應。28張表,我們熟悉下。
ACT_GE : GE 表示 general。 通用數據, 用于不同場景下.
ACT_HI:'HI’表示 history。 這些表包含歷史數據,比如歷史流程實例, 變量,任務等等。
ACT_ID:用戶的身份信息
ACT_RE :'RE’表示 repository。 這個前綴的表包含了流程定義和流程靜態(tài)資源(圖片,規(guī)則,等等)。
ACT_RU:'RU’表示 runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti 只在流程實例執(zhí)行過程中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表可以一直很小速度很快。
Activiti核心類
我們先看一個簡單的Demo,學習一下ProcessEngine這個引擎類
/** * 添加業(yè)務key 到Activiti的表 */ @Test public void addBusinessKey(){ // 1、獲取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 2、獲取RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); // 3、啟動流程的過程中,添加businesskey // 第一個參數:流程定義的key // 第二個參數:businessKey,存出差申請單的id,就是1001 ProcessInstance instance = runtimeService. startProcessInstanceByKey("myLeave", "1001"); // 4、輸出 System.out.println("businessKey=="+instance.getBusinessKey()); }
package org.activiti.engine; import org.activiti.engine.api.internal.Internal; /** * Provides access to all the services that expose the BPM and workflow operations. * // 提供對公開BPM和工作流操作的所有服務的訪問。 *
- *
- * {@link org.activiti.engine.RuntimeService}: Allows the creation of {@link org.activiti.engine.repository.Deployment}s and the starting of and searching on * {@link org.activiti.engine.runtime.ProcessInstance}s. *
- * {@link org.activiti.engine.TaskService}: Exposes operations to manage human (standalone) {@link org.activiti.engine.task.Task}s, such as claiming, completing and assigning tasks *
- * {@link org.activiti.engine.ManagementService}: Exposes engine admin and maintenance operations *
- * {@link org.activiti.engine.HistoryService}: Service exposing information about ongoing and past process instances. *
RepositoryService:是activiti的資源管理類,提供了管理和控制流程發(fā)布包和流程定義的操作。使用工作流建模工具設計的業(yè)務流程圖需要使用此service將流程定義文件的內容部署到計算機。
[x] 幫助我們實現流程定義的部署。此服務會處理與流程定義相關的靜態(tài)數據。
[x] 查詢引擎中的發(fā)布包和流程定義。
[x] 暫停或激活發(fā)布包,對應全部和特定流程定義。 暫停意味著它們不能再執(zhí)行任何操作了,激活是對應的反向操作。獲得多種資源,像是包含在發(fā)布包里的文件, 或引擎自動生成的流程圖。
[x] 獲得流程定義的pojo版本, 可以用來通過java解析流程,而不必通過xml。
RuntimeService:Activiti的流程運行管理類。可以從這個服務類中獲取很多關于流程執(zhí)行相關的信息
TaskService:Activiti的任務管理類。可以從這個類中獲取任務的信息。
HistoryService:Activiti的歷史管理類,可以查詢歷史信息,執(zhí)行流程時,引擎會保存很多數據(根據配置),比如流程實例啟動時間,任務的參與者, 完成任務的時間,每個流程實例的執(zhí)行路徑,等等。 這個服務主要通過查詢功能來獲得這些數據。
ManagementService:Activiti的引擎管理類,提供了對 Activiti 流程引擎的管理和維護功能,這些功能不在工作流驅動的應用程序中使用,主要用于 Activiti 系統(tǒng)的日常維護。
BPMN 2.0學習
關于bpmn的學習,這里不多介紹,小伙伴可以移步到我的其他的博客,專門整理了一份筆記。BPMN 2.0學習筆記 (基于Activiti實踐學習筆記)
Activiti7與SpringBoot整合開發(fā)
Activiti7正式版發(fā)布后,就已經支持與SpringBoot2.X版本完全整合開發(fā)了。
引入maven依賴:核心的依賴就是org.activiti:activiti-spring-boot-starter,數據庫依賴等,pom.xml 文件:https://gitee.com/liruilonger/Activiti-Demo/blob/master/pom.xml
創(chuàng)建配置文件application.yml https://gitee.com/liruilonger/Activiti-Demo/blob/master/src/main/resources/application.yml
https://gitee.com/liruilonger/Activiti-Demo.git
這樣基本的框架就搭建好了。準備工作我們已經做完啦,下面就開始進入正題啦
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。