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描述 。
如果熟練,手動編寫pbmn的xml文件。(對座標和結點的大小通過工具完成)
三、環境搭建
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 流程變數歷史表