前置工作
使用Idea创建bpmn.xml文件并定义流程:
这里我定义了一个请假流程,流程定义文件保存在resource资源目录下的**/bpmn/leave.bpmn20.xml**
开始部署流程:
@Test
public void testActiviti(){
//创建ProcessEngineConfiguration
ProcessEngineConfiguration configuration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine = configuration.buildProcessEngine();
// 使用RepositoryService进行部署
Deployment deployment = processEngine.getRepositoryService().createDeployment()
.addClasspathResource("bpmn/leave.bpmn20.xml")
.name("请假流程")
.deploy();
// 4、输出部署信息
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署名称:" + deployment.getName());
}
执行上面的代码后Activitri会自动帮我们把定义好的流程以及其他的信息一起保存在数据库,我们可以在数据库中查看到流程的部署信息:
ACT_RE_DEPLOYMENT
保存流程文件的ACT_GE_BYTEARRAY
到这里流程已经部署完成了,可以开始启动流程实例了。比如请假流程,每一个请假流程都会启动一个请假流程实例,就好比类和对象的关系,流程就是类,启动一个流程就好比创建一个对象。每个人的请假流程都是独立的且互不干扰。
/**
* 启动一个流程实例
*/
@Test
public void startInstance(){
//创建ProcessEngineConfiguration
ProcessEngineConfiguration configuration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine = configuration.buildProcessEngine();
// 启动一个请假实例,开始请假流程
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById("leave:2:5003");
// 输出内容
System.out.println("流程定义id:"+processInstance.getProcessDefinitionId());
System.out.println("流程实例id:"+processInstance.getId());
System.out.println("活动编号"+processInstance.getActivityId());
}
启动一个实例后就开始startEvent了,Activiti就帮我们定义好了每个人的任务在数据库中:
ACT_RU_TASK表:
每当一个任务完成后就会从系统中删除,而在历史表中更新END_TIME字段,比如说请假流程xx科长审批完成,系统就会在task表中删除xx科长的任务信息添加xx部长的审批任务,历史任务表中的xx科长就会更新完成时间,新增xx部长的任务信息。