1. 程式人生 > 程式設計 >Activiti流程引擎物件及配置原理解析

Activiti流程引擎物件及配置原理解析

流程引擎物件和其配置物件都是activiti的核心物件

一、activiti的簡單使用流程

activiti在工作時,一般有以下幾個步驟:

  • 建立一個流程引擎配置物件ProcessEngineConfiguration對流程引擎進行配置
  • 通過流程引擎配置物件來獲取流程引擎物件ProcessEngine
  • 通過流程引擎物件來部署流程圖
  • 啟動流程

二、流程引擎配置物件ProcessEngineConfiguration的介紹

activiti用ProcessEngineConfiguration物件來配置流程引擎。ProcessEngineConfiguration類提供了多個建立該類物件的靜態方法,可以讀取相應的配置檔案,返回ProcessEngineConfiguration例項。通過該類中提供的getter和setter方法可以對流程引擎配置物件進行配置。

三、activiti配置檔案的介紹

activiti建立流程引擎配置物件時需要一個配置檔案,

<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名稱的流程引擎配置物件 -->
  <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/activiti_01"></property>
    <property name="jdbcUsername" value="root"></property>
    <property name="jdbcPassword" value="root"></property>
    <property name="databaseSchemaUpdate" value="true"></property>
  </bean>

</beans>

仔細觀察這個配置檔案,這其實是一個spring的配置檔案,在其中配置了一個ProcessEngineConfiguration類的bean,然後在程式碼中就可以讀取這個配置檔案,獲取這個bean。

processEngineConfiguration這個bean要注入的屬性:

(1)資料庫連線相關的屬性

(2)databaseSchemaUpdate,資料庫策略,

  • false:預設值,設定為該值,activiti在啟動時如果資料庫中沒有表或者版本不匹配,會丟擲異常
  • true:啟動時會對所有表進行更新,如果沒有表就會自動建立表
  • create-drop: 啟動時建立表,關閉時刪除表

針對其中的資料庫連線相關的屬性,我們還可以在這個配置檔案中再配置一個數據源,在這裡引用資料來源的bean

<!-- 配置連線池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"/>
  <property name="user" value="root"/>
  <property name="password" value="root"/>
</bean>

四、獲取流程引擎配置物件

4.1 讀取預設名稱的配置檔案來建立配置物件

ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault() 這個方法會在classpath下讀取名為activiti.cfg.xml的配置檔案,並獲取名稱為processEngineConfiguration的bean返回。

所以如果在resources目錄下給定一個activiti.cfg.xml配置檔案,在其中建立一個名為processEngineConfiguration的bean,在程式中呼叫這個方法就可以得到流程引擎配置物件。

  /**
   * 用ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault()
   * 建立流程引擎配置物件
   */
  @Test
  public void test1() {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
    System.out.println(configuration);
  }

4.2 讀取自定義名稱的配置檔案來建立流程引擎配置物件

ProcessEngineConfiguration.createProcessEngineConfigurationFromResource()方法可以載入指定位置的配置檔案,並獲取給定名稱的bean來得到流程引擎配置物件。

  @Test
  public void test2() {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("cfg/activiti-cfg.xml","processEngineConfiguration");
    System.out.println(configuration);
  }

五、流程引擎物件

ProcessEngine,流程引擎物件,是activiti的核心物件之一,使用該物件來部署流程。

要獲取該物件時,需要先獲取ProcessEngineConfiguration 流程引擎配置物件來對流程引擎進行配置,然後通過這個配置物件來獲取流程引擎物件。下面說明下如何獲取流程引擎物件

5.1 buildProcessEngine方法建立
這個方法是ProcessEngineConfiguration類的例項方法,該方法返回一個已經配置好的流程引擎物件

  @Test
  public void testCreateProcessEngine() {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
    ProcessEngine processEngine = configuration.buildProcessEngine();
    System.out.println(processEngine);
  }

5.2 用ProcessEngines類來獲取

activiti在ProcessEngines類中也提供了建立流程引擎物件的方法,這是一個建立和關閉流程引擎的工具類,所有建立的(包括使用其他方式建立的)ProcessEngine例項都會被註冊到ProcessEngines中,實際上是在該類中維護了一個Map物件,key為ProcessEngine例項的名稱,value為ProcessEngine例項。

5.2.1使用ProcessEngines.init()方法獲取

ProcessEngines的init方法,會讀取activiti的預設配置檔案,即classpath下的activiti.cfg.xml檔案,並將建立的流程引擎例項快取到map中,該方法會在map中建立key=default的ProcessEngine物件,

然後我們就可以先獲取到這個map,然後從map中獲取key=defalut的流程引擎物件。

  @Test
  public void testCreateProcessEngine2() {
    //讀取配置檔案,建立流程引擎物件快取到map中
    ProcessEngines.init();
    //獲取map
    Map<String,ProcessEngine> enginesMap = ProcessEngines.getProcessEngines();
    //獲取key為default的物件
    ProcessEngine processEngine = enginesMap.get("default");
    System.out.println(processEngine);
  }

5.2.2 使用getDefaultProcessEngine()方法獲取

ProcessEngines的getDefaultProcessEngine()方法,會返回快取map中的key為default的流程引擎物件,如果這個map還沒有進行初始化,該方法就會先呼叫ProcessEngines.init()方法初始化快取map,然後再獲取key為default的流程引擎物件。

  @Test
  public void testCreateProcessEngine3() {
    ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
    System.out.println(defaultProcessEngine);
  }

比較以上的幾種建立流程引擎的方式,我們一般選擇ProcessEngines.getDefaultProcessEngine()方法來獲取,

因為這種方式最簡單,只需要提供一個使用預設名稱的配置檔案activiti.cfg.xml,在其中做好對流程引擎的配置

然後我們就可以直接獲取流程引擎物件。

六、總結

以上介紹了activiti中的兩個核心物件,流程引擎配置物件和流程引擎物件,以及如何獲取這兩個物件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。