注:本次教程全部在Activiti-5.16.4版本下测试通过
首先需要配置好springMVC的项目,这里就不再赘述,(有时间也会写一个springMVC简单教程),即在springMVC原有项目上添加Activiti工作流配置。
一、添加所需jar包
从官网上下载对应的版本,在里面找到Activiti所需jar包,这里我添加了Activiti提供的11个jar,分别为:
activiti-bpmn-converter-5.16.4.jar
activiti-bpmn-layout-5.16.4.jar
activiti-bpmn-model-5.16.4.jar
activiti-common-rest-5.16.4.jar
activiti-engine-5.16.4.jar
activiti-image-generator-5.16.4.jar
activiti-json-converter-5.16.4.jar
activiti-process-validation-5.16.4.jar
activiti-rest-5.16.4.jar
activiti-simple-workflow-5.16.4.jar
activiti-spring-5.16.4.jar
同时也需要如下5个jar包,
mybatis-3.2.5.jar
slf4j-api-1.7.6.jar
slf4j-log4j12-1.7.6.jar
commons-lang3-3.3.2.jar
joda-time-2.1.jar
全部拷贝到WEB-INF/lib目录下即可。
二、添加spring配置信息
在WEB-INF/applicationContext.xml配置文件中,添加如下代码:
<!-- spring负责创建流程引擎的配置文件 -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource2" />
<!-- 配置事务管理器,统一事务 -->
<property name="transactionManager" ref="transactionManager" />
<!-- 设置建表策略,如果没有表,自动创建表 -->
<property name="databaseSchemaUpdate" value="true" />
<!-- 是否启动jobExecutor -->
<!-- <property name="jobExecutorActivate"value="false" /> -->
</bean>
<!-- 创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!-- 创建activiti提供的各种服务 -->
<!-- 工作流仓储服务 -->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<!-- 工作流运行服务 -->
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<!-- 工作流任务服务-->
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<!-- 工作流历史数据服务-->
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<!-- 工作流管理服务-->
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<bean id="formService" factory-bean="processEngine" factory-method="getFormService" />
<!-- 工作流唯一服务 -->
<!-- <bean id="IdentityService"factory-bean="processEngine"factory-method="getIdentityService"/> -->
解释:
其中dataSource2为activiti数据库(将在第三步详细介绍),建议单独管理,这样可以避免跟业务数据库中数据产生冲突,也方便流程数据的管理,只需再定义一个新的数据源即可,如下:
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/activiti?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true"></property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
</bean>
其中transactionManager为spring统一事务管理,如果你使用的是Hibernate,定义如下:
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
如果使用的是spring-jpa,定义如下:
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
三、创建activiti数据库
从官网下载并解压的文件中找到database文件下的各类数据库脚本,这里用的是mysql数据库,所以把其中mysql的脚本拷贝出来,新建一个mysql数据库,名为activiti,分别运行
activiti.mysql.create.engine.sql
activiti.mysql.create.identity.sql
activiti.mysql.create.history.sql
这三个sql脚本,它们分别创建了12张、4张、8张表,共24张表格,请核对是否全部创建成功。
注:可能是因为mysql版本或者其它原因,创建datetime格式的字段时不能有长度定义,所以需要把上述三个sql脚本中的datetime(3)改为datetime,另外把activiti.mysql.create.engine.sql中的CURRENT_TIMESTAMP(3)改为CURRENT_TIMESTAMP
四、单元测试
public static void main(String[] args) {
// 1.创建Activiti配置对象的实例
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// 2.设置数据库连接信息
// 设置数据库地址
configuration
.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?createDatabaseIfNotExist&useUnicode=true&characterEncoding=utf8");
// 数据库驱动
configuration.setJdbcDriver("com.mysql.jdbc.Driver");
// 用户名
configuration.setJdbcUsername("root");
// 密码
configuration.setJdbcPassword("");
// 设置数据库建表策略
/**
* DB_SCHEMA_UPDATE_TRUE:如果不存在表就创建表,存在就直接使用
* DB_SCHEMA_UPDATE_FALSE:如果不存在表就抛出异常
* DB_SCHEMA_UPDATE_CREATE_DROP:每次都先删除表,再创建新的表
*/
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 3.使用配置对象创建流程引擎实例(检查数据库连接等环境信息是否正确)
ProcessEngine processEngine = configuration.buildProcessEngine();
System.out.println(processEngine);
}
运行无异常即说明Activiti已整合到springMVC中。