1. 程式人生 > >Activiti工作流的學習(一)——Activiti簡介以及maven中環境搭建

Activiti工作流的學習(一)——Activiti簡介以及maven中環境搭建

一、工作流簡述

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

工作流就是通過計算機技術對業務流程進行自動化管理。實現多個參與者按照預定的流程去自動執行業務流程。

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

常見的工作流框架:

Activiti5.13、JBPM4.4、OSWorkFlow、WorkFlow......

工作流框架底層需要有資料庫提供支援,activiti5.13版本,有23張表,activiti5.22有25張表。JBPM4.4框架底層有資料庫支援,18張表。JBPM底層使用hibernate操作資料庫。Activiti框架底層使用的mybatis操作資料庫

Activiti是Apache下的開源BPM平臺。

二、重要名詞解釋

①工作流引擎

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

②BPM

BPM,即業務流程管理,是一種以規範化的構造端到端的卓越業務流程為中心,以持續的提高組織業務績效為目的的系統化方法,常見商業管理教育如EMBA、MBA等均將BPM包含在內。

③BPMN

BPMN:業務流程建模與標註,包括這些圖如何組合成一個業務流程圖(Business Process Diagram);討論BPMN的各種的用途,包括以何種精度來影響一個流程圖中的模型;BPMN作為一個標準的價值,以及BPMN未來發展的遠景。

④流物件:一個業務流程圖有三個流物件的核心元素

Ⅰ.事件

一個事件用圓圈來描述,表示一個業務流程期間發生的東西。事件影響流程的流動,一般有一個原因(觸發器)或一個影響(結果)。基於它們對流程的影響,有三種事件:開始,中間以及終止事件

Ⅱ.活動

用圓角矩形表示,一個流程由一個活動或多個活動組成

Ⅲ.條件

條件用熟悉的菱形表示,用於控制序列流的分支與合併。另外,它還可以作為傳統的選擇,還包括路徑的分支與合併。其內部的標記會給出控制流的型別。

Activiti使用Bpmn2.0標準進行流程定義(流程建模),bpmn採用xml描述 。

如何使用bpmn進行流程建模:

通常情況下,使用建模工具進行流程圖繪製,生成一個圖形,通過工具檢視bpmn的xml描述 。

如果熟練,手動編寫pbmnxml文件。(對座標和結點的大小通過工具完成)

三、環境搭建

pom.xml:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>5.22.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>5.22.0</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.4.14</version>
    </dependency>
    <!-- 單元測試 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.24</version>
    </dependency>


</dependencies>

搭建好之後,就應該建立Activiti的資料庫,可以選擇去Activiti官網下載,Activiti也有類似Hibernate自動建表的方法,需要建立配置檔案,檔名必須為:為activiti-context.xml或者activiti.cfg.xml,

配置檔案:

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context-2.5.xsd
						http://www.springframework.org/schema/tx
						http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <!-- 配置流程引擎配置物件 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql:///activitidb" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="1234" />
        <property name="databaseSchemaUpdate" value="true" />
    </bean>

    <!-- 配置一個流程引擎工廠bean,用於建立流程引擎物件 -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <!-- 通過set方法注入流程引擎配置物件 -->
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>

</beans>

接下來進行測試就可以建表,測試主要是獲得到核心引擎就可以自動建表:

package com.little.Test01;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.junit.Test;

public class createActivitiTable {
    @Test
    public void createTable(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(processEngine);
    }

}

測試完成,就可以看見資料庫中多了25張空表:

Activiti表說明:

概括幾個常用的表

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

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

act_re_deployement 部署物件表

act_rep_procdef  流程定義表

act_ge_bytearray 資原始檔表

act_ge_prperty  主鍵生成策略表(對於部署物件表的主鍵ID)

  • 流程例項相關表

act_ru_execution 正在執行的執行物件表(包含執行物件ID和流程例項ID,如果有多個執行緒可能流程例項ID不一樣)

act_hi_procinst 流程例項歷史表

act_hi_actinst 存放歷史所有完成的任務

  • Task 任務相關表

act_ru_task 代辦任務表 (只對應節點是UserTask的)

act_hi_taskinst 代辦任務歷史表 (只對應節點是UserTask的)

act_hi_actinst  所有節點活動歷史表 (對應流程的所有節點的活動歷史,從開始節點一直到結束節點中間的所有節點的活動都會被記錄)

  • 流程變量表

act_ru_variable 正在執行的流程變量表

act_hi_variable 流程變數歷史表