第二節: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講義第二版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章