概述:ProcessEngineConfiguration對象代表一個Activiti流程引擎的全部配置,該類提供一系列創建ProcessEngineConfiguration實例的靜態方法,這些方法用於讀取和解析相應的配置文件,並返回ProcessEngineConfiguration的實例。出這些靜態方法外,該類爲其他可配置的引擎屬性提供相應的setter和getter方法
此處用到的所有類關係如下圖:
一、讀取默認的配置文件
說明:
- 在默認情況下,會直接到ClassPath下讀取名爲“activiti.cfg.xml”的Activiti配置文件,啓動並獲取名稱爲“processEngineConfiguration”的bean實例。
- 此處使用的類是StandaloneProcessEngineConfiguration,它是processEngineConfiguration的子子類,因爲processEngineConfiguration是抽象類,不能直接使用。
-
文件所在位置如下:
-
以下爲一個默認的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">
<!--"&"是轉義符,代表"&"-->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/act?useSSL=false&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>
- 此時默認去獲取該配置文件的代碼如下:
ProcessEngineConfiguration configuration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
System.out.println(configuration.getJdbcUrl());
//結果:jdbc:mysql://localhost:3306/act
二、讀取自定義的配置文件
- 配置文件位置:
- my-activiti1.xml配置文件內容和上面一樣,只是文件名變了。
- my-activiti2.xml配置文件的bean的id變了,如下:
- 獲取配置文件的方法是兩個重載的方法,獲取配置文件代碼如下:
//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的名稱。下面例子只指定了文件位置
- 配置文件位置:
- 配置文件內容和默認配置的activiti.cfg.xml一樣
- 獲取配置文件見代碼如下:
//讀取輸入流的配置,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
四、獲取獨立的流程引擎配置(不使用配置文件方式)
- 使用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
- 使用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講義第二版》