activiti入门
activiti入门
一.安装activiti插件
在eclipse的根目录的dropins中放入activiti插件
二.activiti的相关包
三.核心配置文件: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">
<!-- 创建ProcessEngineConfiguration对象的bean -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 配置对象的配置信息 :连接数据库,使用MyBatis连接池 -->
<property name="jdbcUrl"
value="jdbc:mysql:///activiti?createDatabaseIfNotExist=true" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123456" />
<!--
databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。
false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。
create-drop: 构建流程引擎时创建数据库表,关闭流程引擎时删除这些表。
-->
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
四.创建核心对象-ProcessEngine
4.1.第一种方式:
ProcessEngineConfiguration processEngineConfigurationFromResource = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("config.xml");
ProcessEngine processEngine = processEngineConfigurationFromResource.buildProcessEngine();
这种方式会在classpath下找指定名称的配置文件
4.2.第二种方式(推荐)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
这种方式的前提是配置文件的名称只能是activiti.cfg.xml,约定大于配置
五.流程
5.1.画流程图
右键resource创建Activiti Diagram
5.2流程图示例
5.3.设置流程图参数
在window中打开Properties视图
设置基本属性
设置执行人(私有任务)或候选人(公有任务)
准备工作做好以后开始部署发布流程
5.4部署发布流程
流程部署后,会在数据库中自动生成以下表
//获取核心对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取仓库相关的核心对象
RepositoryService repositoryService = processEngine.getRepositoryService();
//创建发布对象
DeploymentBuilder deployment = repositoryService.createDeployment();
//上传资源
deployment.addClasspathResource("MyProcess.bpmn");
deployment.addClasspathResource("MyProcess.png");
deployment.deploy();
5.5.开启流程
//获取运行时相关的核心对象
RuntimeService runtimeService = processEngine.getRuntimeService();
//启动流程
runtimeService.startProcessInstanceByKey("myProcess");
5.6.认领任务
认领公有任务,如果是私有任务,不用认领,直接完成
//获取运行时相关的核心对象
TaskService taskService = processEngine.getTaskService();
//认领公有任务,即candidate有多个人,认领后,task表中的ASSIGNEE字段中会添加认领人的名字
taskService.claim("2504", "zs");
5.7完成任务
taskService.complete("2504");
5.8.查询流程是否结束
//获取运行时相关的核心对象
RuntimeService runtimeService = processEngine.getRuntimeService();
//获取流程实例的查询对象
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
//查询单个流程。如果流程还没有结束,第一个流程实例id默认为2501
ProcessInstance result = processInstanceQuery.processInstanceId("2501").singleResult();
if(result==null){
System.out.println("流程结束");
}else{
System.out.println("流程未结束或不存在");
}
5.9.当最后一个任务完成后,所有数据都会进入到history表中
查询历史列表
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取历史服务
HistoryService historyService = processEngine.getHistoryService();
//获取查询对象
HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery();
List<HistoricActivityInstance> list = query.list();
for (HistoricActivityInstance hci : list) {
System.out.println("=================");
System.out.println(hci.getActivityId());
System.out.println(hci.getActivityName());
System.out.println(hci.getStartTime());
System.out.println(hci.getEndTime());
}