創(chuàng)建一個(gè)ProcessEngine
Flowable流程引擎通過名為的XML文件進(jìn)行配置flowable.cfg.xml
.
獲得一個(gè)最簡單的方法ProcessEngine
是使用這個(gè)org.flowable.engine.ProcessEngines
類:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
會在類路徑中查找文件flowable.cfg.xml
, 并根據(jù)該文件中的配置構(gòu)建引擎. 以下片段顯示了一個(gè)示例配置. 以下部分將詳細(xì)介紹配置屬性.
<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 id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:h2:mem:flowable;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
<property name="asyncExecutorActivate" value="false" />
<property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>
</beans>
請注意, 配置的XML實(shí)際上是一個(gè)Spring配置. 這并不意味著Flowable只能在Spring環(huán)境中使用! 我們只是利用Spring內(nèi)部的解析和依賴注入功能來構(gòu)建引擎.
注意 在
flowable.cfg.xml
必須包含有ID processEngineConfiguration 的Bean
數(shù)據(jù)庫配置
有兩種方法來配置Flowable引擎將使用的數(shù)據(jù)庫. 第一個(gè)選項(xiàng)是定義數(shù)據(jù)庫的JDBC屬性:
jdbcUrl:數(shù)據(jù)庫的JDBC URL.
jdbcDriver:執(zhí)行特定數(shù)據(jù)庫類型的驅(qū)動(dòng)程序.
jdbcUsername:連接到數(shù)據(jù)庫的用戶名.
jdbcPassword:連接到數(shù)據(jù)庫的密碼.
基于提供的JDBC屬性構(gòu)建的數(shù)據(jù)源將具有默認(rèn)的MyBatis連接池設(shè)置. 可以選擇設(shè)置以下屬性來調(diào)整連接池(取自MyBatis文檔):
jdbcMaxActiveConnections:連接池在任何時(shí)間最多可以包含的活動(dòng)連接數(shù).默認(rèn)值是10.
jdbcMaxIdleConnections:連接池在任何時(shí)間最多可以包含的空閑連接數(shù).
jdbcMaxCheckoutTime:在強(qiáng)制返回連接之前, 可以從連接池中檢出連接的時(shí)間量(以毫秒為單位).默認(rèn)是20000(20秒).
jdbcMaxWaitTime:這是一個(gè)低級別的設(shè)置, 讓池有機(jī)會打印日志狀態(tài), 并重新嘗試獲取連接, 以防異常耗時(shí)(為了避免在池被錯(cuò)誤配置的情況下永遠(yuǎn)失敗)是20000(20秒).
示例數(shù)據(jù)庫配置:
<property name="jdbcUrl" value="jdbc:h2:mem:flowable;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
我們的基準(zhǔn)測試表明, 在處理大量的并發(fā)請求時(shí), MyBatis連接池并不是最高效或靈活的. 因此, 建議使用javax.sql.DataSource
實(shí)現(xiàn), 并將其注入流程引擎配置(例如DBCP, C3P0, Hikari, Tomcat連接池等):
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/flowable" />
<property name="username" value="flowable" />
<property name="password" value="flowable" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
...
無論您使用JDBC還是數(shù)據(jù)源, 都可以設(shè)置以下屬性:
databaseType: 通常不需要指定該屬性, 因?yàn)樗梢詮哪愕臄?shù)據(jù)庫連接字符串中自動(dòng)檢測. 如果自動(dòng)檢測失敗時(shí)需要指定. 能選擇的值有{h2, mysql, oracle, postgres, mssql, db2}.
databaseSchemaUpdate: 設(shè)置策略來處理流程引擎啟動(dòng)和關(guān)閉時(shí)的數(shù)據(jù)庫模式.
false(默認(rèn)值):在創(chuàng)建流程引擎時(shí)檢查數(shù)據(jù)庫模式的版本,如果版本不匹配,則引發(fā)異常.
true: 在構(gòu)建流程引擎時(shí), 將執(zhí)行檢查, 并在必要時(shí)執(zhí)行架構(gòu)的更新. 如果架構(gòu)不存在, 則會創(chuàng)建該架構(gòu).
create-drop: 在創(chuàng)建流程引擎時(shí)創(chuàng)建模式, 并在流程引擎關(guān)閉時(shí)刪除模式.
支持的數(shù)據(jù)庫
MySQL用戶注意
低于5.6.4的MySQL版本不支持時(shí)間戳或毫秒級精度的日期. 更糟糕的是, 有些版本在創(chuàng)建這樣的列時(shí)會拋出異常, 而其他版本則不會.
具體來說, 以下適用于MySQL版本:
<5.6: 沒有可用的毫秒精度. DDL文件可用(查找包含mysql55的文件).可以直接使用自動(dòng)創(chuàng)建/更新.
5.6.0 - 5.6.3: 沒有可用的毫秒精度. 自動(dòng)創(chuàng)建/更新將不起作用. 建議無論如何升級到更新的數(shù)據(jù)庫版本. 如果不行, 可以使用mysql 5.5的 DDL文件.
5.6.4+: 可用的毫秒精度. 可用的DDL文件(包含mysql的默認(rèn)文件). 可直接使用自動(dòng)創(chuàng)建/更新.
數(shù)據(jù)庫表名解釋
Flowable的數(shù)據(jù)庫名稱都以ACT_開頭. 第二部分是表用例的兩字符識別. 這個(gè)用例也將大致匹配服務(wù)API.
ACT_RE_ *: RE代表repository. 帶有此前綴的表包含靜態(tài)信息, 如流程定義和流程資源(圖像, 規(guī)則等).
ACT_RU_ *: RU代表runtime. 這些是包含流程實(shí)例, 用戶任務(wù), 變量, 作業(yè)等的運(yùn)行時(shí)數(shù)據(jù)存儲表. Flowable僅在流程實(shí)例執(zhí)行期間存儲運(yùn)行時(shí)數(shù)據(jù), 并在流程實(shí)例結(jié)束時(shí)刪除記錄. 這使運(yùn)行時(shí)間小而快速.
ACT_HI_ *: HI代表history. 這些表格包含歷史數(shù)據(jù), 例如過去的流程實(shí)例, 變量, 任務(wù)等等.
ACT_GE_ *: general數(shù)據(jù), 用于各種用例.
數(shù)據(jù)庫升級
確保在運(yùn)行升級之前備份數(shù)據(jù)庫(使用數(shù)據(jù)庫備份功能).
默認(rèn)情況下, 每次創(chuàng)建流程引擎時(shí)都會執(zhí)行版本檢查. 這通常發(fā)生在您的應(yīng)用程序或Flowable Web應(yīng)用程序啟動(dòng)時(shí). 如果Flowable庫注意到庫版本和Flowable數(shù)據(jù)庫表版本之間存在差異, 則拋出異常.
要進(jìn)行升級, 您必須先將以下配置屬性放在flowable.cfg.xml
配置文件中:
<beans >
<bean id="processEngineConfiguration"
class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- ... -->
<property name="databaseSchemaUpdate" value="true" />
<!-- ... -->
</bean>
</beans>