1. 程式人生 > 程式設計 >第二節:Activiti6.0配置檔案的讀取

第二節:Activiti6.0配置檔案的讀取

概述:ProcessEngineConfiguration物件代表一個Activiti流程引擎的全部配置,該類提供一系列建立ProcessEngineConfiguration例項的靜態方法,這些方法用於讀取和解析相應的配置檔案,並返回ProcessEngineConfiguration的例項。出這些靜態方法外,該類為其他可配置的引擎屬性提供相應的setter和getter方法

此處用到的所有類關係如下圖:

類關係

一、讀取預設的配置檔案

說明

  • 在預設情況下,會直接到ClassPath下讀取名為“activiti.cfg.xml”的Activiti配置檔案,啟動並獲取名稱為“processEngineConfiguration”的bean例項。
  • 此處使用的類是StandaloneProcessEngineConfiguration,它是processEngineConfiguration的子子類,因為processEngineConfiguration是抽象類,不能直接使用。
  1. 檔案所在位置如下:

    預設配置

  2. 以下為一個預設的activiti.cfg.xml的配置檔案:

<beans xmlns="http://www.springframework.org/schema/beans"
       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">
<!--流程引擎配置的bean--> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!--"&amp"是轉義符,代表"&"--> <property
name="jdbcUrl" value="jdbc:mysql://localhost:3306/act?useSSL=false&amp;characterEncoding=UTF-8" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" /> <property name="jdbcUsername" value="root" /> <property name="jdbcPassword" value="123456" /> <!--該屬性有三個取值,說明如下: 1. false: false為預設值,設定為該值後, Activiti 在啟動時, 會對比資料庫表中儲存的版本, 如果沒有表或者版本不匹配時, 將在啟動時丟擲異常。 2. true: 設定為該值後, Activiti 會對資料庫中所有的表進行更新, 如果表不存在, 則Activiti 會自動建立。 3. create-drop: Activiti 啟動時, 會執行資料庫表的建立操作, 在 Activiti 關閉時, 執行資料庫表的刪除操作。 --> <property name="databaseSchemaUpdate" value="true" /> </bean> </beans> 複製程式碼
  1. 此時預設去獲取該配置檔案的程式碼如下:
ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
System.out.println(configuration.getJdbcUrl());
        
//結果:jdbc:mysql://localhost:3306/act
複製程式碼

二、讀取自定義的配置檔案

  1. 配置檔案位置:
    配置檔案位置
  2. my-activiti1.xml配置檔案內容和上面一樣,只是檔名變了。
  3. my-activiti2.xml配置檔案的bean的id變了,如下:
    bean
  4. 獲取配置檔案的方法是兩個過載的方法,獲取配置檔案程式碼如下:
//1.指定配置檔案建立ProcessEngineConfiguration:
//Activiti會到ClassPath下查詢my-activiti1.xml的配置檔案,並建立名稱為"processEngineConfiguration的bean
ProcessEngineConfiguration configuration1 =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti1.xml");
System.out.println(configuration1.getJdbcUrl());
//結果:jdbc:mysql://localhost:3306/act

//2.指定配置檔案建立ProcessEngineConfiguration,兩個引數:第一個為配置檔案位置,第二個為建立bean的名稱
ProcessEngineConfiguration configuration2 =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti2.xml","test");
System.out.println(configuration2.getJdbcUrl());
//結果:jdbc:mysql://localhost:3306/act
複製程式碼

三、讀取輸入流的配置

說明

  • ProcessEngineConfiguration中提供了一個createProcessEngineConfigurationFromInputStream方法,該方法使得Activiti配置檔案的載入不在侷限於專案的ClassPath,只要得到配置檔案的輸入流,即可建立ProcessEngineConfiguration。
  • 該方法也提供了兩個過載的方法,可以知道在解析時bean的名稱。下面例子只指定了檔案位置
  1. 配置檔案位置:
    配置檔案位置
  2. 配置檔案內容和預設配置的activiti.cfg.xml一樣
  3. 獲取配置檔案見程式碼如下:
//讀取輸入流的配置,file的根目錄是專案名稱的位置:此處即為first-activiti
File file = new File("test/input-stream.xml");
InputStream inputStream = new FileInputStream(file);
ProcessEngineConfiguration configuration3 = ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream);
System.out.println(configuration3.getJdbcUrl());
//結果:jdbc:mysql://localhost:3306/act
複製程式碼

四、獲取獨立的流程引擎配置(不使用配置檔案方式)

  1. 使用creatStandaloneInMemProcessEngineConfiguration方法建立ProcessEngineConfiguration,該方法返回的是StandaloneInMemProcessEngineConfiguration。使用該方法不用Activiti配置檔案。並且該例項值只預設瞭如下兩個屬性(可看原始碼):
  • this.databaseSchemaUpdate = "create-drop";
  • this.jdbcUrl = "jdbc:h2:mem:activiti"; 程式碼如下
ProcessEngineConfiguration configuration4 = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
System.out.println(configuration4.getJdbcUrl());
System.out.println(configuration4.getDatabaseSchemaUpdate());

//結果:
//jdbc:h2:mem:activiti
//create-drop
複製程式碼
  1. 使用createStandaloneProcessEngineConfiguration方法建立獨立的配置,不需要使用配置檔案,不過此方法返回的例項是StandaloneProcessEngineConfiguration,其所擁有的屬性都是ProcessEngineConfiguration的預設的(可看ProcessEngineConfiguration原始碼) 程式碼如下:
ProcessEngineConfiguration configuration5 = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
System.out.println(configuration5.getJdbcUrl());
System.out.println(configuration5.getDatabaseSchemaUpdate());

//結果:
//jdbc:h2:tcp://localhost/~/activiti
//false
複製程式碼

看《瘋狂workflow講義第二版》