第二節:Activiti6.0配置檔案的讀取
阿新 • • 發佈:2020-06-24
概述: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講義第二版》