一、processEngineConfiguration配置


<beanid="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<propertyname="jdbcUrl"value="jdbc:h3:mem:activiti;DB_CLOSE_DELAY=1000"/><propertyname="jdbcDriver"value="org.h3.Driver"/><propertyname="jdbcUsername"value="sa"/><propertyname="jdbcPassword"value=""/><propertyname=""value="true"/><propertyname=""value="false"/><propertyname="mailServerHost"value="mail.my-corp.com"/><propertyname="mailServerPort"value="5025"/>

<propertyname="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连接池方式:

<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/activiti"/><propertyname="username"value="activiti"/><propertyname="password"value="activiti"/><propertyname="defaultAutoCommit"value="false"/></bean><beanid="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><propertyname="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执行器冲突,可以关闭它。默认,在流程引擎启动时就会激活。如果不想在流程引擎启动后自动激活,可以设置

<propertyname="jobExecutorActivate"value="false"/>



六、配置部署缓存

所有流程定义都被缓存了(解析之后)避免每次使用前都要访问数据库,因为流程定义数据是不会改变的。默认,不会限制这个缓存。如果想限制流程定义缓存,可以添加如下配置

<propertyname="processDefinitionCacheLimit"value="10"/>


七、日志、映射诊断上下文

需要打印工作流的日志时需要配置,默认不打印日志。


九、事件处理

1、事件监听器实现:

实现事件监听器的唯一要求是实现org.activiti.engine.delegate.event.ActivitiEventListener。


publicclassMyEventListenerimplementsActivitiEventListener{@OverridepublicvoidonEvent(ActivitiEventevent){switch(event.getType()){caseJOB_EXECUTION_SUCCESS:System.out.println("Ajobwelldone!");break;caseJOB_EXECUTION_FAILURE:System.out.println("Ajobhasfailed...");break;default:System.out.println("Eventreceived:"+event.getType());}}@OverridepublicbooleanisFailOnException(){//ThelogicintheonEventmethodofthislistenerisnotcritical,exceptions//canbeignoredifloggingfails...returnfalse;}}

方法决定了当事件分发时,方法抛出异常时的行为。这里返回的是,会忽略异常。当返回时,异常不会忽略,继续向上传播,迅速导致当前命令失败。当事件是一个API调用的一部分时(或其他事务性操作,比如job执行),事务就会回滚。当事件监听器中的行为不是业务性时,建议返回。activiti提供了一些基础的实现,实现了事件监听器的常用场景。可以用来作为基类或监听器实现的样例:

org.activiti.engine.delegate.event.BaseEntityEventListener: 这个事件监听器的基类可以用来监听实体相关的事件,可以针对某一类型实体,也可以是全部实体。 它隐藏了类型检测,并提供了三个需要重写的方法:onCreate(..),onUpdate(..)onDelete(..),当实体创建,更新,或删除时调用。对于其他实体相关的事件,会调用onEntityEvent(..)


2、配置:


<beanid="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">...<propertyname="eventListeners"><list><beanclass="org.activiti.engine.example.MyEventListener"/></list></property></bean>

<beanid="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">...<propertyname="typedEventListeners"><map><entrykey="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE"><list><beanclass="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);