1. 程式人生 > >Acitiviti工作流簡介

Acitiviti工作流簡介

               

一、工作流

說到工作流,一圖勝萬言。

工作流(Workflow),就是“業務過程的部分或整體在計算機應用環境下的自動化”,它主要解決的是“使在多個參與者之間按照某種預定義的規則傳遞文件、資訊或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現”。


工作流管理系統(Workflow Management System, WfMS)是一個軟體系統,它完成工作量的定義和管理,並按照在系統中預先定義好的工作流規則進行工作流例項的執行。工作流管理系統不是企業的業務系統,而是為企業的業務系統的執行提供了一個軟體的支撐環境。


工作流管理聯盟(WfMC,Workflow Management Coalition)給出的關於工作流管理系統的定義是:工作流管理系統是一個軟體系統,它通過執行經過計算的流程定義去支援一批專門設定的業務流程。工作流管理系統被用來定義、管理、和執行工作流程。


工作流管理系統的目標:管理工作的流程以確保工作在正確的時間被期望的人員所執行——在自動化進行的業務過程中插入人工的執行和干預。

二、Activiti      

那什麼是Activiti呢,說到這裡不得不說它的來源和發展。

介紹

Activiti5是由Alfresco軟體在2010年5月17日釋出的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴充套件的可執行流程語言框架。Activiti基於Apache許可的開源BPM平臺,創始人Tom Baeyens是JBoss jBPM的專案架構師,它特色是提供了eclipse外掛,開發人員可以通過外掛直接繪畫出業務流程圖。  

       

我們看看它其中需要用到哪些東西:

工作流引擎

ProcessEngine物件,這是Activiti工作的核心。負責生成流程執行時的各種例項及資料、監控和管理流程的執行。

BPMN

業務流程建模與標註(Business Process Model and Notation,BPMN) ,描述流程的基本符號,包括這些圖元如何組合成一個業務流程圖(Business Process Diagram)

資料庫

Activiti資料庫支援,

Activiti的後臺是有資料庫的支援,所有的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。 用途也和服務的API對應。

ACT_RE_*: 'RE'表示repository。 這個字首的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。
ACT_RU_*: 'RU'表示runtime。 這些執行時的表,包含流程例項,任務,變數,非同步任務,等執行中的資料。 Activiti只在流程例項執行過程中儲存這些資料, 在流程結束時就會刪除這些記錄。 這樣執行時表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 這些表包含身份資訊,比如使用者,組等等。
ACT_HI_*: 'HI'表示history。 這些表包含歷史資料,比如歷史流程例項, 變數,任務等等。
ACT_GE_*: 通用資料, 用於不同場景下,如存放資原始檔。


表結構操作:
1:資源庫流程規則表
1)    act_re_deployment     部署資訊表
2)    act_re_model          流程設計模型部署表
3)    act_re_procdef          流程定義資料表

2:執行時資料庫表
1)    act_ru_execution        執行時流程執行例項表
2)    act_ru_identitylink        執行時流程人員表,主要儲存任務節點與參與者的相關資訊
3)    act_ru_task            執行時任務節點表
4)    act_ru_variable        執行時流程變數資料表

3:歷史資料庫表
1)    act_hi_actinst         歷史節點表
2)    act_hi_attachment        歷史附件表
3)    act_hi_comment        歷史意見表
4)    act_hi_identitylink        歷史流程人員表
5)    act_hi_detail            歷史詳情表,提供歷史變數的查詢
6)    act_hi_procinst        歷史流程例項表
7)    act_hi_taskinst        歷史任務例項表
8)    act_hi_varinst            歷史變量表

4:組織機構表
1)    act_id_group        使用者組資訊表
2)    act_id_info            使用者擴充套件資訊表
3)    act_id_membership    使用者與使用者組對應資訊表
4)    act_id_user            使用者資訊表
這四張表很常見,基本的組織機構管理,關於使用者認證方面建議還是自己開發一套,元件自帶的功能太簡單,使用中有很多需求難以滿足

5:通用資料表
1)    act_ge_bytearray        二進位制資料表
2)    act_ge_property            屬性資料表儲存整個流程引擎級別的資料,初始化表結構時,會預設插入三條記錄,

activiti.cfg.xml(activiti的配置檔案)

Activiti核心配置檔案,配置流程引擎建立工具的基本引數和資料庫連線池引數。
定義資料庫配置引數:
jdbcUrl: 資料庫的JDBC URL。
jdbcDriver: 對應不同資料庫型別的驅動。
jdbcUsername: 連線資料庫的使用者名稱。
jdbcPassword: 連線資料庫的密碼。


基於JDBC引數配置的資料庫連線 會使用預設的MyBatis連線池。 下面的引數可以用來配置連線池(來自MyBatis引數):
jdbcMaxActiveConnections: 連線池中處於被使用狀態的連線的最大值。預設為10。
jdbcMaxIdleConnections: 連線池中處於空閒狀態的連線的最大值。
jdbcMaxCheckoutTime: 連線被取出使用的最長時間,超過時間會被強制回收。 預設為20000(20秒)。
jdbcMaxWaitTime: 這是一個底層配置,讓連線池可以在長時間無法獲得連線時, 列印一條日誌,並重新嘗試獲取一個連線。(避免因為錯誤配置導致沉默的操作失敗)。 預設為20000(20秒)。


示例配置:

<span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!--   ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();  //連線資料庫的配置  processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");  processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");  processEngineConfiguration.setJdbcUsername("root");                  processEngineConfiguration.setJdbcPassword("130427");    /*   public static final String DB_SCHEMA_UPDATE_FALSE = "false"; 不能自動建立表,需要表存在      public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再建立表   public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自動建立表  */    processEngineConfiguration.setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);  --> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">  <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8"></property>  <property name="jdbcUsername" value="root"></property>  <property name="jdbcPassword" value="130427"></property>   <!-- 沒有表建立表 -->  <property name="databaseSchemaUpdate" value="true"></property>  </bean> </beans></span>

logging.properties(日誌處理)

日誌的配置檔案,Activiti操作資料庫的時候,整合的日誌檔案


        對Activiti大概有了瞭解,接下來就是其環境如何配置,敬請期待下篇博文。

      

       

          

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow