Activiti天生支持spring,所以与spring的集成是非常方便的。
1.依赖
<!-- spring-activiti集成 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>
Activiti与spring集成需要依赖activiti-spring的包
2.配置
Spring集成的核心配置类:org.activiti.spring.SpringProcessEngineConfiguration
<!-- spring配置 -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
数据源配置
<property name="dataSource" ref="dataSource"></property>
数据库连接信息
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="root123"></property>
自动创建表
<property name="databaseSchemaUpdate" value="true"></property>
关闭JobExecutor的自动启动
<property name="jobExecutorActivate" value="false"></property>
配置自定义缓存
<property name="processDefinitionCache">
<bean class="com.vclouds.workflow.cache.MyCache" />
</property>
</bean>
其他的配置与之前类似
3.创建引擎
与spring集成就需要使用spring来讲引擎创建出来。
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
4.事务管理
与spring集成之后就必须使用事务管理,即必须配置事务,否则会出现数据无法提交的情况
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
5.创建服务
利用工厂的方式创建各个服务类对象
利用工厂方式得到服务类对象
<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" />
6.业务信息依托流程
业务信息需要通过流程进行一系列的操作,业务的一些信息需要在流程的运行过程中不断变动,不断更新,如果当前业务在流程中没有更新操作,那么这个业务信息就是一成不变的,就不是一个完整的业务信息,需要脱离流程进行操作,所以使用到流程的话需要将业务信息关联到流程。
7.流程关联业务信息
流程关联业务可以使用流程变量,在当前流程运行过程中,流程变量都可以获取,也就是在当前流程过程中,业务数据始终跟随,这样在做一些更新业务信息的操作就非常方便了。
当然,activiti也提供了一个关联业务的字段,在流程执行对象表中的BusinessKey列,使用这个字段,可以自定义规则将所需要的业务信息存放到当前字段,可以通过当前字段获得业务信息,也可以通过业务信息得到当前字段的值;
例如:Business类是业务类,其中id为主键,那么就可以将当前字段设置为Business:id,其中Business为当前业务类的simpleName,中间使用:分隔,id为业务主键,这样得到业务字段值的时候就可以查找业务信息,同时也可以通过字段值查询流程信息。