一、processEngineConfiguration配置
<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="" value="true" /> <property name="" value="false" /> <property name="mailServerHost" value="mail.my-corp.com" /> <property name="mailServerPort" value="5025" />
<property name="createDiagramOnDeploy" value="false" /><!--不生成流程定义图片-->
</bean>
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration
单独运行的流程引擎。Activiti会自己处理事务。 默认,数据库只在引擎启动时检测 (如果没有Activiti的表或者表结构不正确就会抛出异常)。
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration
单元测试时的辅助类。Activiti会自己控制事务。 默认使用H2内存数据库。数据库表会在引擎启动时创建,关闭时删除。 使用它时,不需要其他配置(除非使用job执行器或邮件功能)。
org.activiti.spring.SpringProcessEngineConfiguration
在Spring环境下使用流程引擎。 参考Spring集成章节。
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration
单独运行流程引擎,并使用JTA事务。
databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。false
(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。true
: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。create-drop
: 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表。
二、数据库相关配置
1、jdbc方式:
jdbcUrl: 数据库的JDBC URL。
jdbcDriver: 对应不同数据库类型的驱动。
jdbcUsername: 连接数据库的用户名。
jdbcPassword: 连接数据库的密码。
jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。
jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。
jdbcMaxCheckoutTime: 连接被取出使用的最长时间,超过时间会被强制回收。 默认为20000(20秒)。
jdbcMaxWaitTime: 这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。 默认为20000(20秒)。
2、dbcp连接池方式:
<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" /> ...
三、JNDI数据库配置、支持的数据库、数据库创建
http://www.mossle.com/docs/activiti/
四、理解数据库表的命名
Activiti的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示
repository
。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。ACT_RU_*: 'RU'表示
runtime
。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。ACT_ID_*: 'ID'表示
identity
。 这些表包含身份信息,比如用户,组等等。ACT_HI_*: 'HI'表示
history
。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。ACT_GE_*:
通用
数据, 用于不同场景下。
五、Job执行器
是管理一系列线程的组件,可以触发定时器(也包含后续的异步消息)。 在单元测试场景下,很难使用多线程。因此API允许查询()和执行job (),所以job可以在单元测试中控制。 要避免与job执行器冲突,可以关闭它。 默认,在流程引擎启动时就会激活。 如果不想在流程引擎启动后自动激活,可以设置
<property name="jobExecutorActivate" value="false" />
六、配置部署缓存
所有流程定义都被缓存了(解析之后)避免每次使用前都要访问数据库, 因为流程定义数据是不会改变的。 默认,不会限制这个缓存。如果想限制流程定义缓存,可以添加如下配置
<property name="processDefinitionCacheLimit" value="10" />
七、日志、映射诊断上下文
需要打印工作流的日志时需要配置,默认不打印日志。
九、事件处理
1、事件监听器实现:
实现事件监听器的唯一要求是实现org.activiti.engine.delegate.event.ActivitiEventListener。
public class MyEventListener implements ActivitiEventListener { @Override public void onEvent(ActivitiEvent event) { switch (event.getType()) { case JOB_EXECUTION_SUCCESS: System.out.println("A job well done!"); break; case JOB_EXECUTION_FAILURE: System.out.println("A job has failed..."); break; default: System.out.println("Event received: " + event.getType()); } } @Override public boolean isFailOnException() { // The logic in the onEvent method of this listener is not critical, exceptions // can be ignored if logging fails... return false; } }
方法决定了当事件分发时,方法抛出异常时的行为。 这里返回的是,会忽略异常。 当返回时,异常不会忽略,继续向上传播,迅速导致当前命令失败。 当事件是一个API调用的一部分时(或其他事务性操作,比如job执行), 事务就会回滚。当事件监听器中的行为不是业务性时,建议返回。 activiti提供了一些基础的实现,实现了事件监听器的常用场景。可以用来作为基类或监听器实现的样例:
-
org.activiti.engine.delegate.event.BaseEntityEventListener: 这个事件监听器的基类可以用来监听实体相关的事件,可以针对某一类型实体,也可以是全部实体。 它隐藏了类型检测,并提供了三个需要重写的方法:
onCreate(..)
,onUpdate(..)
和onDelete(..)
,当实体创建,更新,或删除时调用。对于其他实体相关的事件,会调用onEntityEvent(..)
。
2、配置:
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> ... <property name="eventListeners"> <list> <bean class="org.activiti.engine.example.MyEventListener" /> </list> </property> </bean>
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> ... <property name="typedEventListeners"> <map> <entry key="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" > <list> <bean class="org.activiti.engine.example.MyJobEventListener" /> </list> </entry> </map> </property> </bean>
3、在运行阶段添加监听器:
可以通过API(RuntimeService
)在运行阶段添加或删除额外的事件监听器:
void addEventListener(ActivitiEventListener listenerToAdd);
void addEventListener(ActivitiEventListener listenerToAdd, ActivitiEventType... types);
void removeEventListener(ActivitiEventListener listenerToRemove);