javascript
「Activiti精品 悟纤出品」核心类以及如何在SpringBoot集成说明 - 第328篇
相關歷史文章(閱讀本文前,您可能需要先看下之前的系列👇)
國內最全的Spring?Boot系列之三
2020上半年發文匯總「值得收藏」
程序CPU占用率飆升,如何定位線程的堆棧信息?「超詳細,值得收藏」看不懂還有配套視頻?-?第319篇
「工作流Activiti」介紹-新手上路,注意安全?-?第320篇
「Activiti精品?悟纖出品」activiti介紹-十萬個為什么?-?第321篇
「Activiti精品?悟纖出品」Activiti6?Getting?Started-?穩扎穩打?-?第322篇
「Activiti精品?悟纖出品」Activiti7?Getting?Started-摸石頭過河?-?第323篇
「Activiti精品?悟纖出品」流程模型搭建-小試牛刀?-?第324篇
「Activiti精品 悟纖出品」基于mysql初始化「圖圖為啥消失了」- 第325篇
師傅:萬事俱備只欠東風了,我們借下東風,接下來能夠無往不利。
悟纖:師傅,你這是諸葛轉世吶,還能借東風了。
師傅:為師這個是比喻,也就是馬上要大功告成了,就差那么一丟丟,你語文是體育老師教的么(體育老師很無賴:為什么我躺著也要中槍吶?)
悟纖:哎,提起這個,當年的往事不堪回首吶,徒兒不是在睡覺就是在睡覺的路上,看別人不是在學習,就是在學習的路上,不能比呀。
師傅:這不,現在要搬磚了吧,趕緊的不搬磚,晚飯別吃了。
悟纖:…. 師傅,我得奮發學習,爭取能搬更多的磚。
師傅:…. 這….
?
?
前言
???????原本是計劃直接開干,講解如何在Spring Boot中如何集成Activiti的,但在實操的時候,發現直接開干的話,確實有點難于理解。本篇先把思路和概念性的東西過掉,這樣后續對于怎么集成就會比較好理解。
一、Activiti流程模型搭建回顧
1.1?核心的幾個步驟
???????我們回顧下之前的文章中流程模型搭建的核心步驟,這里以activiti6的操作來進行說明,如果你還不知道怎么流程搭建的,請回看文章《「工作流Activiti」流程模型搭建-小試牛刀》。
???????我們來簡單回顧一下核心的步驟:
(1)創建用戶和用戶組:主要是用于流程中的發起和審批使用的。
(2)創建流程實例:用于流程的設計,具體的操作就是使用了可視化的操作,進行BPMN規定的元素進行操作,最終就是一個XML的文件。
(3)創建表單:用于流程某些節點的數據源,比如提交請假審批,那么就要有一個請假單進行填寫。
(4)創建App和發布:我們通過創建一個應用,然后應用中綁定流程進行流程的發布,發布之后的流程就可以進行操作了,用戶可以發起此應用發起流程。
?
1.2?其它說明
???????我們在使用activiti-app的種種操作,核心就是為了獲取到bpmn文件,在和spring boot集成的時候,這個文件就是核心了,那么我們是必須要使用activiti-app才能進行創建bpmn文件嘛,答案:不是。在前面的小節,我們也介紹了相應的工具的插件,在實際開發的過程中,開發人員使用插件的方式肯定是比activiti-app的方式方便吶。
?
二、Spring Boot中集成Activiti說明
2.1?集成說明
???????對于Spring Boot中的集成一般都是引入相關的依賴即可。
對于activiti6和7的依賴是有很大的區別的:
Actviti6:
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>6.0.0</version> </dependency>Actviti7:
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.1.0.M6</version> </dependency>??????當然對于依賴而言,只是這個依賴配置不一樣,但是底層的一些核心還是一樣的。
2.2?集成思路
???????對于Activiti的單獨使用我們已經有了一個了解,對于如何集成,和activiti的使用有一定的相通之處。
???????我們看看核心的一些點:
2.2.1?構建流程圖文件bpmn
???????對于流程圖而言,最新的就是這個bpmn描述文件了,所以我們第一步就是要有這么一個文件才能后續的操作。
2.2.2?流程的操作
???????不管是流程的發布還是流程的發起、審批都是流程的操作,在activiti-app中是activiti-app這個工程的底層幫我們完成了,那么底層是如何完成的吶,是不是activiti的引擎進行完成的呢,是的。
Activiti的工作流引擎幫我們把這些在流程中的節點進行進行處理,以完成整個流程。那么在我們自己集成的Spring Boot中,引入了activiti相關的jar文件,那么對于要發起流程是不是只要調用activiti中的相關的發起流程方法就好了。
?
三、Activiti的核心類
???????在上面分析到了Activiti工作流引擎是由核心的一些指令進行發起相應的操作的,我們這里看看具體都有什么核心的類,可以供我們進行操作,這里很重要,后續的集成例子會用到部分的類。
3.1?架構圖和核心類圖
Activiti采用了一個分層架構完成自底向上的包裝。架構圖如下:
?
?
???????對于Activiti的架構這里不展開說明,要是展開說明這一節又講不完了,哎一講東西就多,這是要鬧哪樣吶。
???????我們還是來看下核心類圖吧:
???????接下來我們就看看這些類都是用來做什么的。
?
3.2?核心類
3.2.1 ProcessEngine
???????流程引擎的抽象,可以通過此類獲取需要的所有服務。
3.2.2 repositoryService
?????? activiti是不能直接識別xml格式的流程圖的,流程圖文件必須被部署到activiti中才能被activiti識別并使用。而這個過程就是使用repositoryService來完成的,流程圖被導入后,會放到act_re_打頭的幾個表中。repositoryService提供了若干個接口,既可以部署xml文件到數據庫中,也可以從數據庫檢索特定流程圖供處理。
3.2.3 runtimeService
activiti最重要的一個服務,基本上所有的關于流程的操作都是通過此服務來執行的。例如啟動流程、審批、會簽等等。
3.2.4 formService
工作流的設計思路之一就是將每個節點需要顯示的數據直接綁定到此節點。而formService就是專門為此服務的,使用formService可以獲取某個節點綁定的表單數據。當然,如果沒有表單綁定到此節點,此服務就沒有任何用處。
3.2.5 identityService
activiti自帶的用于管理自身的組織機構的服務。activiti自身的組織機構包括user和group兩大類,而user、group以及user和group的關系都是通過自服務來維護的。因此如果需要使用activiti自身的組織機構的,就會使用到此服務。不過通常情況下我們都是是用的框架中的身份認證和組織機構,所以此服務使用頻率也不高。
3.2.6 taskService
???????任務是activiti的核心功能之一,所有涉及到任務的操作都是通過此服務來完成的。例如任務的查詢、分配、認領、完成等。
3.2.7 historyService
所有流程實例的信息都會被保存的歷史信息中,當一個流程實例結束之前,它是被保存在runtime和history兩個地方,當它結束后,就只有history里了。
3.2.8 managementService
提供對activiti數據庫的直接訪問,因此通常情況下使用不到此服務。
?
3.3 Event-Listener組件
?????? Activiti允許客戶代碼介入流程執行,提供了事件監聽組件。監聽的事件類型可以分為TaskListener、JavaDelegate、Expression、ExecutionListener。ProcessEngineConfigurationImpl持有DelegateInterceptor的某個實例,方便調用handleInvocation。
3.4?異步執行組件
?????? Activiti可以執行任務,JobExecutor為啟核心類,JobExecutor包含三個主要屬性:JobAcquisitionThread,BlockingQueue,ThreadPoolExecutor。方法ProcessEngines在引擎啟動時調用JobExecutor.start,JobAcquisitionThread 線程即開始工作,其run方法不斷循環執行AcquiredJobs中的job,執行一次后線程等待一定時間直到超時或者JobExecutor.jobWasAdded方法,因為有新任務而被調用。
?
悟纖小結
師傅:這一節的主要是目的是要梳理下集成時的核心思路以及Activiti的核心類,在后續的開發中,這些核心類占據著很重要的位置。好了徒兒,不知道你消化了為師的思路否?
悟纖:差不多吧。
師傅:記著多少了?
悟纖:七八成吧。
師傅:現在呢?
悟纖:都忘了,一點都不記住了。
師傅:你以為你在練太極劍法吶。
悟纖:師傅,這是無形中喚醒了我的記憶《倚天屠龍記》。
師傅:別扯淡了,趕緊趁熱總結下。
悟纖:好的,馬上。
(1)流程模型搭建:對于流程模型搭建這個要在心中有劍,這樣就能理解Activiti的一個工作機制了。
(2)對于Spring Boot集成Activiti有一個大體的思路:這樣有助于后續的實戰集成操作。
(3)Activiti的核心類:runtimeService、taskService這個是核心的核心,千萬要記住。
?
我就是我,是顏色不一樣的煙火。 我就是我,是與眾不同的小蘋果。à悟空學院:https://t.cn/Rg3fKJD
學院中有Spring?Boot相關的課程!點擊「閱讀原文」進行查看!
SpringBoot視頻:http://t.cn/A6ZagYTi
SpringBoot交流平臺:https://t.cn/R3QDhU0
SpringSecurity5.0視頻:http://t.cn/A6ZadMBe
ShardingJDBC分庫分表:http://t.cn/A6ZarrqS
分布式事務解決方案:http://t.cn/A6ZaBnIr
JVM內存模型調優實戰:http://t.cn/A6wWMVqG
Spring入門到精通:https://t.cn/A6bFcDh4
大話設計模式之愛你:https://dwz.cn/wqO0MAy7
總結
以上是生活随笔為你收集整理的「Activiti精品 悟纤出品」核心类以及如何在SpringBoot集成说明 - 第328篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蚂蚁金服入职考试_阿里巴巴蚂蚁金服面试通
- 下一篇: 二叉树的中序遍历和后序遍历算法