該版本的Activiti運行須知:
1.JDK 6+,Eclipse最好是Kepler以上版本。
2.試驗功能都有EXPERIMENTAL標注,被標注的部分不應該視為穩定的。
有興趣的同學可以去了解下Activiti Explorer項目,他涵蓋了大部分Activiti的功能,還沒有Activiti概念的同學可以看看了解一下。
Activiti沿用具有Spring配置文件風格的配置,工作流默認是加載名叫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 id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcUrl" value="jdbc:h2:mem:activiti;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="jobExecutorActivate" value="false" /> <property name="asyncExecutorEnabled" value="true" /> <property name="asyncExecutorActivate" value="false" /> <property name="mailServerHost" value="mail.my-corp.com" /> <property name="mailServerPort" value="5025" /> </bean> </beans>
而我們寫好配置文件,交給activiti加載有以下幾種方式:
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault(); ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource); ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName); ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream); ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);
如果你喜歡零配置的話,可以:
ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
比如零配置使用其中第二種方法:
1 ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration() 2 .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE) 3 .setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000") 4 .setAsyncExecutorEnabled(true) 5 .setAsyncExecutorActivate(false) 6 .buildProcessEngine();
不過我個人認為瑣碎的配置如果都交給代碼來維護的話,太費神了!況且交給代碼水平不高的程序員來寫的話,也不安全。所以還是交給xml吧,零配置除了新鮮沒用。
1.1 activiti.cfg.xml文件配置
activiti.cfg.xml
必須包含id為
processEngineConfiguration的bean節點,例如:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
processEngineConfiguration通常用來構造ProcessEngine,activiti提供了以下4個類來定義processEngineConfiguration
:
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:通過獨立的方式獲得流程引擎對象,Activiti將自己管理事務,一般的,數據庫僅僅實在系統啟動的時候被檢測。
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration: 它主要用作測試。Activiti將自己管理事務,默認使用H2數據庫,數據庫表將在啟動被創建和關閉時被銷毀。所以也就沒多少配置了。
org.activiti.spring.SpringProcessEngineConfiguration: 它用作和Spring整合的。
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration: 在獨立模式中,使用了分布式事務可以使用它。(本人不怎麼清楚)
數據庫連接目前有兩種配置,一種是使用MyBatis默認的數據庫連接配置,另外一種是主流的數據庫連接池。我是推薦後者的,因為前者的官方說明文檔裡面已經說了在生產上建議不使用默認的數據庫連接設置。
前者的配置如下:(簡單掠過)
<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" /> <property name="jdbcDriver" value="org.h2.Driver" /> <property name="jdbcUsername" value="sa" /> <property name="jdbcPassword" value="" />
第二種方案:使用javax.sql.DataSource,比如DBCP,C3P0,Druid等
<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/activiti" /> <property name="username" value="activiti" /> <property name="password" value="activiti" /> <property name="defaultAutoCommit" value="false" /> </bean> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="dataSource" ref="dataSource" /> ...
Activiti工作流並沒有提供數據庫連接池的Jar包,我們需要手動下載加到類路徑下面。
無論使用那種數據庫連接方案,一些數據庫的其他配置需要關注:
databaseType:一般不需要,工作流內部會自動分析數據元,僅僅是在自動分析失敗後讀取該配置,目前支持的數據庫有 h2, mysql, oracle, postgres, mssql, db2。
databaseSchemaUpdate:
在類路徑下面加入activiti的jar包,數據庫連接的jar,添加activiti.cfg.xml,然後運行DbSchemaCreate即可。
在生產上面往往開發者並沒有數據庫的管理員權限,所以在activiti的jar中提供了sql給相關人員,這些表總的來說分為三大類:
在MySQL上運行執行sql可要注意了,如果版本在5.5~5.6.3的請使用5.5版本的sql執行,或者就是升級數據庫5.6.4+,因為在5.6.4的以下版本的MySQL的timestamps或者 date精度沒有達到毫秒級,在工作流創建這一類列的話就會拋出異常。
工作流相關的表全部是以“ACT_”開頭的,後面緊接著的第二部分是activiti提供的service的簡寫, 比如:
ACT_RE_*: RE 代表 repository
. 包含流程定義,流程資源等。
ACT_RU_*: RU 代表 runtime
. 這些表包含流程運行實例,任務、變量、分配工作等,這些表中僅僅存放運行數據,在流程實例執行結束後會被清除,這樣表中的數據比較少,它使得程序執行很快。
ACT_ID_*: ID 代表 identity
. 這些表包含了用戶信息數據,比如用戶個人信息,組信息等。
ACT_HI_*: HI 代表 history
. 這些表包含歷史數據,比如過去的流程實例,變量,任務等。
ACT_GE_*: 通用的數據表,被用來存放各種數據。