Activiti工作流淺析

新鈦雲服已累計爲您分享695篇技術乾貨

一、工作流1、工作流概述

如圖所示,員工先提出請假申請,提交該申請給直屬領導審批,直屬領導審批後,再提交給人事部門審批,審批完成後,通知提出申請的員工,即請假流程結束。整個步驟按照正常工作方式一步步完成,這就是一個簡單而又完整的工作流;工作流可以理解爲從開始節點發起流程,然後經過其中多個節點,完成動作,最後到結束節點的整個過程。

在沒有工作流引擎之前,爲了實現上述的流程控制,開發人員最常用的做法是採用狀態值跟蹤流程的狀態變化,假設初始值爲0,每一個流程的流轉,狀態值+1,然後給出相應的處理邏輯。可以看出工作的流程和業務高度耦合,當流程發生變化時,我們的業務代碼也要做出同等的調整。

如果有一個工具幫助我們管理工作流,當業務流程變化後,程序不需要發生變化,最終將會讓我們的開發能力和業務能力大幅提升。於是乎,工作流引擎應運而生!

二、Activiti介紹1、簡介

Activiti是一個開源的工作流引擎,它實現了BPMN 2.0規範,可以發佈設計好的流程定義,並通過api進行流程調度

Activiti是一種輕量級,可嵌入的BPM引擎,可以將複雜的業務流程抽取出來,然後使用專門的建模語言BPMN2.0定義執行流程,最終業務系統通過訪問Activiti的接口去驅動預定義的流程執行

Activiti 流程引擎重點關注在系統開發的易用性和輕量性上.每一項BPM業務功能Activiti流程引擎都以服務的形式提供給開發人員.通過使用這些服務,開發人員能夠構建出功能豐富,輕便且高效的BPM應用程序

activiti.cfg.xml:

Activiti核心配置文件,配置流程引擎創建工具的基本參數和數據庫連接池參數

核心類:

ProcessEngine: 流程引擎的抽象,可以通過此類獲取需要的所有服務

服務類:

·XxxService: 通過ProcessEngine獲取,Activiti將不同生命週期的服務封裝在不同Service中,包括定義,部署,運行.通過服務類可獲取相關生命週期中的服務信息

·Rep ositoryServiceRepository Service提供了對repository的存取服務 Activiti中每一個不同版本的業務流程的定義都需要使用一些定義文件,部署文件和支持數據(例如BPMN2.0XML文件,表單定義文件,流程定義圖像文件等),這些文件都存儲在Activiti內建的Repository中

·RuntimeServiceRuntime Service提供了啓動流程,查詢流程實例,設置獲取流程實例變量等功能.此外它還提供了對流程部署,流程定義和流程實例的存取服務

·TaskServiceTask Service提供了對用戶Task和Form相關的操作.它提供了運行時任務查詢,領取,完成,刪除以及變量設置等功能

·HistoryServiceHistory Service用於獲取正在運行或已經完成的流程實例的信息,與Runtime Service中獲取的流程信息不同,歷史信息包含已經持久化存儲的永久信息,並已經被針對查詢優化

·FormService使用Form Service可以存取啓動和完成任務所需的表單數據並且根據需要來渲染表單 Activiti中的流程和狀態Task均可以關聯業務相關的數據

·IdentityServiceIdentity Service提供了對Activiti系統中的用戶和組的管理功能 Activiti中內置了用戶以及組管理的功能,必須使用這些用戶和組的信息才能獲取到相應的Task

·ManagementServiceManagement Service提供了對Activiti流程引擎的管理和維護功能 這些功能不在工作流驅動的應用程序中使用,主要用於 Activiti 系統的日常維護

組件

· 持久化組件:

Activiti使用mybatis作OR映射,並在此基礎上增加設計了自己的持久化框架在流程引擎創建時初始化,頂層接口Session,SessionFactorySession有兩個實現類:DbSqlSession: 負責sql表達式的執行AbstractManager: 負責對象的持久化操作SessionFactory有兩個實現類:DbSqlSessionFactory: 負責DbSqlSession相關操作GenericManagerFactory: 負責AbstractManager相關操作

· Event-Listener組件:

Activiti允許客戶代碼介入流程執行,提供了事件監聽組件監聽的事件類型:TaskListener、JavaDelegate、Expression、ExecutionListener、ProcessEngineConfigurationImpl持有DelegateInterceptor的某個實例,方便調用handleInvocation

· Cache組件:

DbSqlSession中有cache的實現Activiti基於List和Map來做緩存:如查詢時先查緩存,沒有則直接查詢並放入緩存

· 異步執行組件:

Activiti可以執行任務,JobExecutor爲其核心類,JobExecutor包含三個主要屬性:JobAcquisitionThread、BlockingQueue、ThreadPoolExecutor,方法ProcessEngines在引擎啓動時調用JobExecutor.start,JobAcquisitionThread 線程即開始工作,其run方法不斷循環執行AcquiredJobs中的job,執行一次後線程等待一定時間直到超時或者JobExecutor.jobWasAdded方法,因爲有新任務而被調用。

· 上下文組件Context:

用來保存生命週期比較長,全局性的信息,類似Application.主要包括如下三類:CommandContext: 命令上下文-保存每個命令必要的資源,如持久化需要的sessionProcessEngineConfigurationImpl: 流程引擎相關配置信息-整個引擎全局的配置信息.如數據源DataSource等.該對象爲單例,在 流程引擎創建的時候初始化ExecutionContext: 持有ExecutionEntity對象

3、Activiti數據庫支持

·所有的表都以ACT_開頭

·第二部分是表示表的用途的兩個字母標識

·用途也和服務的API對應

ACT_RE_* : 'RE'表示repository. 這個前綴的表包含了流程定義和流程靜態資源(圖片,規則...)ACT_RU_* : 'RU'表示runtime.這些運行時的表, 包含流程實例,任務,變量,異步任務,等運行中的數據.Activiti只在流程實例執行過程中保存這些數據,在流程結束時就會刪除這些記錄.這樣運行時表可以一直很小速度很快ACT_ID_* : 'ID'表示identity.這些表包含身份信息, 比如用戶,組...ACT_HI_* : 'HI'表示 history.這些表包含歷史數據, 比如歷史流程實例,變量,任務...ACT_GE_* :通用數據. 用於不同場景下, 如存放資源文件

資源庫流程規則表說明:

act_re_deployment 部署信息表act_re_model 流程設計模型部署表act_re_procdef 流程定義數據表

運行時數據庫表說明

act_ru_execution 運行時流程執行實例表act_ru_identitylink 運行時流程人員表,主要存儲任務節點與參與者的相關信息act_ru_task 運行時任務節點表act_ru_variable 運行時流程變量數據表

組織結構表說明

act_id_group 用戶組信息act_id_info 用戶擴展信息表act_id_membership 用戶與用戶組對應信息表act_id_user 用戶信息表

4、BPM/BPMN介紹

BPM(Business Process Management),即業務流程管理,是一種規範化的構造端到端的業務流程,以持續的提高組織業務效率。常見商業管理教育如EMBA、MBA等均將BPM包含在內。BPMN(Business Process Model AndNotation)即業務流程模型和符號,是一套標準的業務流程建模符號,使用 BPMN 提供的符號可以創建業務流程。Activiti 就是使用 BPMN 進行流程建模、流程執行管理的。BPMN2.0 是業務流程建模符號 2.0 的縮寫,它由 Business Process Management Initiative 這個非營利協會創建並不斷髮展。BPMN2.0 是使用一些符號來明確業務流程設計流程圖的一套符號規範,能增進業務建模時的溝通效率。目前 BPMN2.0 是最新的版本,它用於在 BPM 上下文中進行佈局和可視化的溝通

BPMN2.0基本符號介紹

簡要列表如下:

三、springboot整合Activiti

·新建springboot項目

·pom.xml導入相關依賴

·在resource目錄下新建process目錄作爲*.bmnp的存儲路徑

·application.yml配置

·idea安裝插件Activiti BPMN visualizer,創建流程圖

打開該文件,右鍵選中如圖

最終會生成xml文件

通過讀取png和bmnp獲取請假流程

四、考慮使用Activiti的場景

1、關鍵業務流程:訂單、報價處理、合同審覈、客戶電話處理、供應鏈管理等

2、行政管理類:出差申請、加班申請、請假申請、用車申請、各種辦公用品申請、購買申請、日報週報等

3、人事管理類:員工培訓安排、績效考評、職位變動處理、員工檔案信息管理等。

4、財務相關類:付款請求、應收款處理、日常報銷處理、出差報銷、預算和計劃申請等。

5、客戶服務類:客戶信息管理、客戶投訴、請求處理、售後服務管理等。

五、總結

從公司講,工作流系統規範了公司的業務流程,優化了企業內部的管理,提高了團隊間地協作效率,能夠幫助企業向知識型企業轉變。

作爲技術開發人員,Activiti在小項目中基於串行並行流轉能夠基本滿足業務和開發的需求;但是Activiti對於技術的要求門檻相對較高,二次開發難度大,需要技術人員不斷提升和學習,在實戰中研發出具有極高價值的工作流系統。